В Java можно определить, вызван ли статический метод из экземпляра объекта или статически (SomeClass.method()
)?Java: определить, вызывается ли статический метод из экземпляра или статически
Чтобы дать Вам лучшее представление о том, что я говорю о том, взять посмотреть на этот код ниже:
public class SomeClass {
public static void staticMethod() {
if (/*called from instance*/) {
System.out.println("Called from an instance.");
} else if (/*called statically*/){
System.out.println("Called statically.");
}
}
public static void main(String[] args) {
new SomeClass().staticMethod();//prints "Called from an instance."
SomeClass.staticMethod();//prints "Called statically."
}
}
Я понимаю, что это не хорошая практика, чтобы вызвать статический метод из экземпляра, но все же, можно ли различать эти два вызова? Я думал, что API Reflection, вероятно, имеет к этому ключ.
Почему не SomeClass.staticMethod (someclassObj)? – waltersu
Это невозможно, он компилируется точно таким же байт-кодом. – tkausl
Нет. Насколько я знаю, эти два вызова составляют точно такой же байт-код. (И @tkausl побеждает на 14 секунд) – ajb