Java的Class.getName()
和Class.getCanonicalName()
之间的区别是什么?Name和CanonicalName有什么区别?
13
A
回答
17
考虑下面的程序:
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()
的回报,如果你试图将类实例,你会用什么。你不能用(匿名)匿名类来做到这一点,所以这就是为什么getCanonicalName()
返回null。
相关问题
- 1. $ name和$$ name有什么区别?
- 2. WPF:'Name'和'x:Name'有什么区别?
- 3. Info.plist和[app name] -Info.plist有什么区别?
- 4. Name和x:Name有什么区别?
- 5. prototype [name]和prototype.name有什么区别?
- 6. Angular2 Form输入中的#name和[(ngModel)] =“name”有什么区别?
- 7. 使用./configure(php)--disable- [name]和--without- [name]之间有什么区别?
- 8. `$ this-> name`和`$ this - > $ name`之间有什么区别?
- 9. .getAttribute(“name”)和.name之间有什么区别?
- 10. 编写`:name =>“String”`和`name:“String”`有什么区别?
- 11. “Exchange Legacy Distinguished Name”和“Active Directory Distingushed Name”之间有什么区别?
- 12. Vue.js中{{name}}和{{{name}}}之间的区别是什么
- 13. Javascript中的var name = function(){}和函数名(){}有什么区别吗?
- 14. `params.require(:person).permit(:name,:age)`和'params.require(:person).permit''有什么区别?
- 15. (本地)和(pc-name)\ SQLEXPRESS有什么区别?
- 16. 目标c中的(NSString)* name和(NSString *)名称有什么区别?
- 17. org-mode中#+ NAME和#+ LABEL有什么区别?
- 18. FUNCALL和#'function-name in common lisp有什么区别?
- 19. localName()和name()。localName()之间有什么区别?
- 20. ng-model =“name”和ng-model =“user.name”有什么区别
- 21. 函数调用和goto&NAME在Perl中有什么区别?
- 22. 在弹簧配置中,使用name和id有什么区别?
- 23. ActionScript中obj [name]和obj.name有什么区别?
- 24. 有什么区别`和$(Bash中有什么区别?
- 25. 有什么区别? :和||
- 26. &&和||有什么区别?
- 27. “/”和“/ *”有什么区别?
- 28. 有什么区别:。!和:r!?
- 29. ==和===有什么区别?
- 30. Appender和〜有什么区别?
也见http://stackoverflow.com/questions/15202997/what-is-the-difference-between-canonical-name-simple-name-and-class-name-in-jav – Anush 2013-12-17 09:56:03
@Anush好笑,我在查看时没有看到那个,这只比我大一个月。谢谢 – durron597 2013-12-17 14:23:27