繁体   English   中英

java获取静态方法的类名

[英]java get accessing class name of static method

是否可以计算用于访问静态方法的类的名称?

为了更好地理解问题:

class S {
    public static String method() {
        return "S";// TODO compute class name here
    }
}

class S1 extends S {
}

class S2 extends S {
}

public class Main {
    public static void main(String[] args) {
        System.out.println(S.method()); //should print S
        System.out.println(S1.method()); //should print S1
        System.out.println(S2.method()); //should print S2
    }
}

似乎我既不能使用堆栈跟踪也不能使用类型参数技术。

谢谢

您不能这样做,因为字节码中既不存在S1.method也不存在S2.method 唯一可用于调用的方法是S.method 编译器解析对它的所有三个调用,并为示例中的所有三个调用生成相同的invokestatic字节代码。

这个问题真的没有意义——在每种情况下调用 method() 都会打印 S——因为它是被调用的相同方法。 您想要以下内容吗?

System.out.println(S1.class.getSimpleName());

你不能说。 即使您从子类调用它,它也是被调用的同一类中的相同方法。 IDE 可能会建议重构您的代码,以便所有三个实例都引用 S 而不是 S1 或 S2。

如果你想做这样的事情,那么考虑

public static String method(Class<S> c) {
   ....
}

并调用它

   S.method(S2.class)

您可能会考虑为什么要这样做,如果采用非静态方法会有助于使这变得更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM