Java 获取类名的一般方法
静态与动态的等价物是什么 String CLASS_NAME=this.getClass().getCanonicalName() 请注意,以下内容并不是我想要的,因为它特别指的是一个特定的类。我想在方法之外引用类名(即在静态{}部分) 静态字符串CLASS_NAME=Foo.CLASS.getCanonicalName()Java 获取类名的一般方法,java,Java,静态与动态的等价物是什么 String CLASS_NAME=this.getClass().getCanonicalName() 请注意,以下内容并不是我想要的,因为它特别指的是一个特定的类。我想在方法之外引用类名(即在静态{}部分) 静态字符串CLASS_NAME=Foo.CLASS.getCanonicalName() 谢谢。不确定我是否理解您的问题-您是否尝试过this.getClass().getCanonicalName()?不太理解您的意思,也许这就是您想要的: public st
谢谢。不确定我是否理解您的问题-您是否尝试过
this.getClass().getCanonicalName()
?不太理解您的意思,也许这就是您想要的:
public static String getCanonicalName(Class<?> clazz){
return clazz.getCanonicalName();
}
公共静态字符串getCanonicalName(类clazz){
返回clazz.getCanonicalName();
}
我想你要做的是:
public static <T> String getCanonicalName() {
return T.class.getCanonicalName();
}
这将获取类的名称,但我非常确定它将与getCanonicalName()
返回的名称不同,而且我真的不知道如何将getClassName()
的输出转换为getCanonicalName()
的输出
我认为Java语言有一个变化,这将真正帮助开发人员编写直观的代码:如果可以添加某种类型的self
关键字to来引用当前类,它将简化任何类似您的场景,允许您编写类似self.class.getCanonicalName()
的内容。但是,就目前的情况来看,我们没有这个,所以你想做的事情是不可能的
还有其他可能的解决办法。例如,您可以尝试以下操作:
static String ClassName = null;
public Foo() {
if(ClassName == null)
ClassName = this.getClass().getCanonicalName();
}
但这要求类是可构造的,这并不总是可取的。如果我们有一个
self
关键字,这也不是那么简单。有一个可怕的黑客
class MyClass{
private static String cannonicalName;
static{
cannonicalName = new Object(){}.getEnclosingClass().getCannonicalName();
}
}
这就是你要找的吗?
它确实以泛型和静态的方式为您提供类名,但您只是为它创建了一个匿名类。第一个类不应该是
this.getClass().getCanonicalName()
?而不是手工编写名称?如果您知道自己所处的类型,为什么需要泛型(因为您想使用静态块)?@Ken generic是非特定的,而不是java泛型。@saidera:我迷路了。你到底想实现什么?@home:他的新答案是非常自我描述的。@home我想知道是否有可能在泛型名称中获得一个类名,而不需要实例it@Ken韦恩·范德林德:是的,看起来你的答案是正确的:-)
class MyClass{
private static String cannonicalName;
static{
cannonicalName = new Object(){}.getEnclosingClass().getCannonicalName();
}
}