在Java中,是否可以确定是从对象的实例调用静态方法还是静态调用(SomeClass.method()
)?
为了让您更好地了解我正在谈论的内容,请查看以下代码:
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."
}
}
我理解从实例调用静态方法不是一种好习惯,但是,是否可以区分这两个调用?我当时认为Reflection API可能是关键所在。
答案 0 :(得分:1)
仅通过调用方法就无法做到这一点。但是,您可以从此处解释的堆栈跟踪中获取一些有用的信息How do I find the caller of a method using stacktrace or reflection?
这将允许您使用静态方法
确定方法名称和/或调用者类答案 1 :(得分:1)
我不认为反思可以做到这一点。但是,你可以用另一种方式制作它:
public class SomeClass {
public static void staticMethod(boolean isStaticCall) {
if (!isStaticCall) {
System.out.println("Called from an instance.");
} else{
System.out.println("Called statically.");
}
}
public static void main(String[] args) {
new SomeClass().staticMethod(false);//prints "Called from an instance."
SomeClass.staticMethod(true);//prints "Called statically."
}
}