Java:确定是从实例调用静态方法还是静态调用静态方法

时间:2016-06-24 03:14:40

标签: java reflection static instance static-methods

在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可能是关键所在。

2 个答案:

答案 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."
    }

}