获得类名的通用方法

Sai*_*ira 5 java

什么是动态的静态等价物

String CLASS_NAME = this.getClass().getCanonicalName()

请注意,以下不是我正在寻找的,因为它特别指的是特定的类.我想在方法之外引用类名(即在静态{}部分)

static String CLASS_NAME = Foo.class.getCanonicalName()

谢谢.

Ken*_*nde 3

我认为你想要做的是:

public static <T> String getCanonicalName() {
    return T.class.getCanonicalName();
}
Run Code Online (Sandbox Code Playgroud)

但我确信您已经发现这是行不通的。这是因为 Java 泛型依赖于类型擦除。也就是说,T仅在编译时存在。在运行时,T不再可访问。

通常,要执行此操作,您必须像在第一个示例中那样使用该类型的实例。

编辑

在了解你问题的真实性质后,我不会直接回答。

我见过像下面这样的某些“黑客行为”

static String ClassName = Thread.currentThread().getStackTrace[0].getClassName();
Run Code Online (Sandbox Code Playgroud)

这获取了类的名称,但我很确定它不会与 返回的名称相同getCanonicalName(),而且我真的不知道如何将 的输出转换getClassName()为 的输出getCanonicalName().

我认为 Java 语言有一个变化,这确实可以帮助开发人员编写直观的代码:如果可以添加某种self关键字来引用当前类,那么它会允许您编写一些东西,从而简化像您这样的任何场景喜欢self.class.getCanonicalName()。但是,就目前情况而言,我们没有这样的能力,所以你想做的事情是不可能直接实现的。

还有其他可能的解决方法。例如,您可以尝试以下操作:

 static String ClassName = null;

 public Foo() {
     if(ClassName == null)
         ClassName = this.getClass().getCanonicalName();
 }
Run Code Online (Sandbox Code Playgroud)

但这要求你的类是可构造的,这并不总是可取的。如果我们有一个关键字的话,它也不会那么简单self