2014-10-17 4 views
3

У меня есть два имени методов как sendSData() и sendCData() в MyClass.Создание зависимости метода в java

class MyClass 
{ 

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

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

} 

Я звоню эти два метода из основного метода

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

Это возможно для меня, чтобы послать запрос sendCData после, если и только если я получил() метод ответа успеха от sendSData.

Как я могу достичь этого в java?

sendData() публикация данных на сервер . если я получу успешный ответ от сервера, тогда мне удастся отправить sendCData(). Я использую паб/подмодуль. Я не звоню в какой-либо веб-сервис или службу REST. для получения ответа Я имею отдельного абонента

+1

Что на самом деле делают эти методы? Похоже, что 'sendSData()' работает асинхронно. Как так? Нам понадобится больше деталей. –

+0

Почему бы не добавить статическую глобальную логическую переменную и вставить ее в sendCData() в значение true, а затем запустить оператор if, который проверяет его состояние. – ryekayo

+0

Вы можете изменить метод для возврата 'boolean' и do' if (obj.sendSData()) {obj.sendCData();} '. Из них они бросают исключения и используют «try ... catch». – AntonH

ответ

0

Вы должны явно проверить, был ли успешно выполнен sendSData.

Вы можете инкапсулировать эту проверку в новом методе, который после того, как называет sendCData или даже проверить вначале на sendCData и если бы не были успешными не делать ничего

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 (успешно ответил).

0

Вы могли бы попробовать что-то вроде этого:

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 верно.

+1

Зачем создавать целую новую переменную, чтобы выполнить это? Это бессмысленно. Посмотрите на использование операторов return. – Nicolas

+0

@Nicolas Это всего лишь один из способов обойти это. Существует несколько способов сделать это. – ryekayo

+0

У вас есть методы экземпляра, но переменная класса.Что делать, если несколько экземпляров этого класса используются одновременно из отдельных потоков? –

0

Вы, скорее всего, решите эту проблему после того, как это было рекомендовано (с использованием простого логического флага). Однако может быть и другая альтернатива. Я думаю, вы можете воспользоваться функцией инверсии управления (IoC). Даже если это не лучшая альтернатива для вашего дела, или даже если это слишком много, я рекомендую вам пройти этот урок, если вы можете: http://www.springbyexample.org/examples/intro-to-ioc.html.

0

Выбрасывание исключения из 'sendSData' в случае сбоя также приведет к трюку, это гарантирует, что 'sendCData' не вызывается.

Смежные вопросы