【问题标题】:Creating method dependency in java在java中创建方法依赖
【发布时间】:2014-10-17 18:00:18
【问题描述】:

我在 MyClass 中有两个方法名为 sendSData() 和 sendCData()。

class MyClass
{

       public void sendSData()
        {
          // Receiving Response from database
        }

        public void sendCData()
        {
         // send C Data
        }

}

我在 main 方法中调用这两个方法

public static void main(String ... args)
{
    MyClass obj=new MyClass();
    obj.sendSData();
    obj.sendCData();
}

当且仅当我从 sendSData() 方法获得成功响应后,我才有可能发送 sendCData 请求。

如何在 java 中实现这一点?

sendData() 将数据发布到服务器 .如果我从服务器获得成功响应,那么我可以发送 sendCData()。 我正在使用 pub/sub 模型。我没有调用任何 Web 服务或 REST 服务。 为了接收响应,我有单独的订阅者

【问题讨论】:

  • 这些方法实际上是做什么的?听起来sendSData() 是异步操作的。怎么会这样?我们需要更多细节。
  • 为什么不添加一个静态全局布尔变量并将其粘贴在 sendCData() 中为 true,然后运行 ​​if 语句来检查它的条件
  • 您可以修改方法以返回boolean,然后执行if (obj.sendSData()) {obj.sendCData();}。让他们抛出异常并使用try ... catch
  • 如何表示成功响应? sendSData 可能应该返回一些东西来指示成功或失败(例如 boolean),或者可能在失败时抛出异常。这样,您就可以在 main 方法中测试结果并做出相应的响应。
  • sendData() 将数据发布到服务器。如果我从服务器获得成功响应,那么我可以发送 sendCData()。我正在使用 pub/sub 模型。我没有调用任何 Web 服务或 REST 服务。为了接收响应,我有单独的订阅者

标签: java publish-subscribe


【解决方案1】:
public boolean sendSData() {
    // handle whether or not the function returns true or false
    return true;
}

public static void main(String ... args) {
    MyClass obj=new MyClass();

    if (obj.sendSData()) {
        obj.sendCData();
    } else {
        // obj.sendSData() did not successfully respond
    }
}

使用上面的代码obj.sendCData() 只会在sendSData() 返回true(成功响应)时运行。

【讨论】:

    【解决方案2】:

    您必须明确检查sendSData 是否成功。

    您可以在调用sendCData 之后将检查封装在一个新方法中,甚至可以在sendCData 的开头进行检查,如果不成功则什么也不做

    【讨论】:

      【解决方案3】:

      你可以试试这样的:

      class MyClass
      {
      
       public static boolean setFlag = false;
      
             public void sendSData()
              {
                // Receiving Response from database
                   setFlag = true;
              }
      
              public void sendCData()
              {
                  if(setFlag==true)
                  {
               // send C Data
                  }
              }
      
      }
      

      引入布尔值可以帮助您调用 sendCData 并通过检查 setFlag 是否为 true 来正确运行。

      【讨论】:

      • 为什么要创建一个全新的变量来完成这个?这是毫无意义。看看使用 return 语句。
      • @Nicolas 这只是解决问题的一种方式。有多种方法可以做到这一点。
      • 您有实例方法,但有一个类变量。如果这个类的多个实例被不同的线程同时使用怎么办?
      • @DavidConrad,我知道这会带来一些麻烦,但提出这个问题的人从未提到这是多线程的
      【解决方案4】:

      您很可能可以按照已经推荐的方法解决此问题(使用简单的布尔标志)。但是,可能还有另一种选择。我认为您可以利用控制反转 (IoC)。即使这不是您的情况的最佳选择,或者即使它是矫枉过正,如果可以的话,我建议您阅读本教程:http://www.springbyexample.org/examples/intro-to-ioc.html

      【讨论】:

        【解决方案5】:

        在失败的情况下从“sendSData”抛出异常也可以解决问题,它会确保不调用“sendCData”。

        【讨论】:

          猜你喜欢
          • 2011-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多