Java 什么';Name和CanonicalName之间的区别是什么?
Java的Java 什么';Name和CanonicalName之间的区别是什么?,java,class,names,canonical-name,Java,Class,Names,Canonical Name,Java的Class.getName()和Class.getCanonicalName()之间有什么区别?考虑以下程序: package org.test.stackoverflow; public class CanonicalName { public static void main(String[] args) { CanonicalName cn = new CanonicalName(); cn.printClassNames(); } privat
Class.getName()
和Class.getCanonicalName()
之间有什么区别?考虑以下程序:
package org.test.stackoverflow;
public class CanonicalName {
public static void main(String[] args) {
CanonicalName cn = new CanonicalName();
cn.printClassNames();
}
private Anonymous anony;
private MyAnony myAnony;
public CanonicalName() {
anony = new Anonymous() {
public void printInterface() {
System.out.println("Anony Name: " + getClass().getName());
System.out.println("Anony CanonicalName: " + getClass().getCanonicalName());
}
};
myAnony = new MyAnony();
}
public void printClassNames() {
System.out.println("CanonicalName, Name: " + getClass().getName());
System.out.println("CanonicalName, CanonicalName: " + getClass().getCanonicalName());
anony.printInterface();
myAnony.printInterface();
}
private static interface Anonymous {
public void printInterface();
}
private static class MyAnony implements Anonymous {
public void printInterface() {
System.out.println("MyAnony Name: " + getClass().getName());
System.out.println("MyAnony CanonicalName: " + getClass().getCanonicalName());
}
}
}
输出:
CanonicalName, Name: org.test.stackoverflow.CanonicalName
CanonicalName, CanonicalName: org.test.stackoverflow.CanonicalName
Anony Name: org.test.stackoverflow.CanonicalName$1
Anony CanonicalName: null
MyAnony Name: org.test.stackoverflow.CanonicalName$MyAnony
MyAnony CanonicalName: org.test.stackoverflow.CanonicalName.MyAnony
因此,对于基类,它们似乎返回相同的结果。对于内部类,
getName()
使用$
命名约定(即用于.class文件的内容),并且getCanonicalName()
返回尝试实例化该类时将使用的内容。(little-a)匿名类不能这样做,因此getCanonicalName()
返回null。还可以看到@Anush,有趣的是,我在查找时没有看到这个类,它比我的类大一个月。谢谢你不可能在几秒钟内找到你自己问题的答案。看起来像是骗局。问题和答案的时间完全相同。@MaciejZiarko底部有一个复选框“以问答方式回答您自己的问题。我想将我最近的发现添加到SO的知识库中,因为我在任何地方都找不到它。为了将来的参考,不要以您试图探索/描述的概念命名该类。。。