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