Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取类名的一般方法_Java - Fatal编程技术网

Java 获取类名的一般方法

Java 获取类名的一般方法,java,Java,静态与动态的等价物是什么 String CLASS_NAME=this.getClass().getCanonicalName() 请注意,以下内容并不是我想要的,因为它特别指的是一个特定的类。我想在方法之外引用类名(即在静态{}部分) 静态字符串CLASS_NAME=Foo.CLASS.getCanonicalName() 谢谢。不确定我是否理解您的问题-您是否尝试过this.getClass().getCanonicalName()?不太理解您的意思,也许这就是您想要的: public st

静态与动态的等价物是什么

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

请注意,以下内容并不是我想要的,因为它特别指的是一个特定的类。我想在方法之外引用类名(即在静态{}部分)

静态字符串CLASS_NAME=Foo.CLASS.getCanonicalName()


谢谢。

不确定我是否理解您的问题-您是否尝试过
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();
    }    
}