2012-02-04 2 views
-1

Если у меня есть метод, а(), что вызов Ь (х):Могу ли я вернуть метод caller return?

int d = 0; 

void a(){ 
    int c = b(x); 
    d = c; 
} 

int b(x){ 
    if(somecondition){ 
     return x; 
    }else{ 
     retrun null; 
    } 
} 

Есть ли способ, что я могу написать функцию b(x) так, что она делает a() возвращения перед изменением d, если я не хочу чтобы проверить, c: null от a()?

+1

Бросьте [Исключение] (http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html) ... но только для «исключительных» ситуаций. AFAIK, это дорого стоить и поэтому не должно использоваться для направления программной логики. –

+0

Чтобы добавить к г-ну Клизу ответ ... http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html –

ответ

0

почему бы вам не использовать простой, если пункт как:

int d = 0; 

void a(){ 
    int c = b(x); 
    d = (c == null) ? d : c; 
} 

int b(x){ 
    if(somecondition){ 
     return x; 
    }else{ 
     return null; 
    } 
} 
+0

Предупреждение: 'null' не является' int'. Вам, вероятно, придется использовать 'Integer'. –

+0

@sled: Потому что мне нужно будет использовать это условие во многих случаях во многих методах, таких как 'a()', и это сделает код уродливым, но, как объяснил Алекс, нет (эффективного?) Способа узнать вызывающего , @LouisWasserman: Спасибо, правильно. 'a()' и 'b()' приведены для иллюстрации. Вывод моего «реального» 'a()' - это объект, который когда-то «null». – jomik

0

Вы можете иметь b(x) выбросить исключение, которое предотвратит присвоение d. Но тогда a() также не будет «возвращаться». В противном случае невозможно достичь этого без изменения кода a().

0

Единственный способ изменить управляющий поток a() с b() без изменения. a() 's код генерирует Исключение из b(). Если возвращение null является условием ошибки, это может быть хорошей идеей.

Если значение null не является ошибкой, возможно, какое-то решение вы хотите сделать на основе возвращаемого значения, поэтому проверка нулевого значения и принятие решения явным образом, вероятно, является вашим лучшим вариантом.

0

Если ситуация такова, что вы собираетесь называть б много раз в вашем коде, и вы хотите, чтобы избежать необходимости переписать нулевая проверка снова и снова, тогда я чувствую вашу боль!

Если указатели на поддержку языка поддерживаются, вы можете попробовать, чтобы b принял указатель на функцию (который был бы a) и выполнял бы только функцию, если somecondition были true. К сожалению, на Java это не вариант.

Наверное, лучше всего сделать так, чтобы исключить б, так как предлагалось «Судно на воздушной подушке, полное угрей». Если у вас есть свои функции, перебросьте исключение, используя throws SomeConditionException и поймайте их всех на более высоком уровне, вы можете избежать дублирования кода.

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