Я хотел бы сказать, что вы пытаетесь достичь, это смесь «невозможно сделать» и «не следует делать», если вы хотите, чтобы компилятор это сделал.
Спросите себя следующее: следующие действия:
class1.method1();
class1.method1();
class1.method2();
или
public void doSomething(){
Class1 class1 = new Class1();
class1.method1();
callIt(class1);
}
void callIt(Class1 class1) {
class1.method2();
}
или
class1.method1();
if (true) return;
class1.method2();
Я сомневаюсь, что вы можете прийти с хорошим и аргументированно для этих трех фрагментов (и многие другие, я мог придумать). Это сводится к следующему: какая конструкция кода удовлетворяет вашему требованию «обязательно вызвать метод2»?
В принципе, это требование просто невозможно выполнить!
Единственный допустимый способ, вероятно, изменить способ method1
работы: Пусть принять Runnable
в качестве аргумента, вызывающий абонент должен пройти, в котором дает абоненту возможность работать после обычной обработки method1
завершается. Затем вызовите method2
внутри method1
:
public void method1(Runnable postRunAction) {
// regular computation
postRunAction.run();
method2();
}
Чтобы сделать пример немного более сложным, если вы хотите использовать возвращаемые значения методов:
public class Class1 {
public SomeReturnType2 method1(Function<SomeReturnType1, SomeParameterType1> yourDoSomething) {
SomeReturnType1 something = /* your computation of method1 */
SomeParameterType1 param = yourDoSomething.apply(something);
return method2(param);
}
private SomeReturnType2 method2(SomeParameterType1 param1){
// do some calculation of method2
}
}
public class Class2 {
public void doSomething(){
Class1 class1 = new Class1();
class1.method1((theReturnValueOfMethod1Computation) -> {
/* do what do you want to do with the return value + return what do you want to pass to method2 */
});
}
}
/* Это является обязательным call method2(); когда метод1(); звонит*. Вы всегда хотите вызвать метод2 при вызове метода1? – CKing
Немного непонятно, что вы спрашиваете! Не могли бы вы рассказать? –
Это не работа компилятора. Вы можете, например, попробуйте написать какой-нибудь плагин maven, который обеспечивает это ограничение. Но почему бы просто не называть write 'method2();' как последний оператор в 'method1'? – luk2302