Sự khác biệt giữa số Class.getName()
và Class.getCanonicalName()
của Java là gì?Sự khác biệt giữa Tên và CanonicalName là gì?
Trả lời
Hãy xem xét các chương trình sau đây:
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());
}
}
}
Output:
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
Vì vậy, có vẻ như cho các lớp học cơ sở, họ trở về cùng một điều. Đối với các lớp bên trong, getName()
sử dụng quy ước đặt tên $
(tức là những gì được sử dụng cho các tệp .class) và getCanonicalName()
trả về những gì bạn sẽ sử dụng nếu bạn đang cố gắng tạo lớp. Bạn không thể làm điều đó với một lớp ẩn danh (ít-a), vì vậy đó là lý do tại sao getCanonicalName()
trả về giá trị rỗng.
Không thể tìm thấy câu trả lời cho câu hỏi của riêng bạn chỉ trong vài giây. Trông giống như lừa dối. Thời gian của câu hỏi và câu trả lời là chính xác như nhau. –
@MaciejZiarko Có một hộp kiểm ở phía dưới "trả lời câu hỏi của riêng bạn, phong cách Q & A. Tôi muốn thêm khám phá gần đây của tôi vào cơ sở kiến thức trong SO, bởi vì tôi không thể tìm thấy nó ở bất cứ đâu. – durron597
các lớp học sau khi các khái niệm rất bạn đang cố gắng để khám phá/miêu tả ... – Andrew
- 1. SBT - Sự khác biệt giữa tên và id là gì?
- 2. Sự khác biệt giữa móc và gọi lại là gì?
- 3. Sự khác biệt giữa localname và qname là gì?
- 4. Sự khác biệt giữa "gọi" và "gọi" là gì?
- 5. Sự khác biệt giữa "Thread.currentThread(). GetName" và "this.getName" là gì?
- 6. Sự khác biệt giữa crontab và cronjob là gì?
- 7. Sự khác biệt giữa gmake và thực hiện là gì?
- 8. Sự khác biệt giữa JavaBean và POJO là gì?
- 9. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 10. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 11. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 12. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 13. Sự khác biệt giữa DBI và DBD là gì?
- 14. Sự khác biệt giữa NSInvocation và chặn là gì?
- 15. Sự khác biệt giữa fn và fn * là gì?
- 16. Sự khác biệt giữa xtype và bí danh là gì?
- 17. Sự khác biệt giữa build.sbt và build.scala là gì?
- 18. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 19. Sự khác biệt giữa while (true) và loop là gì?
- 20. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 21. Sự khác biệt giữa uint và System.UInt32 là gì?
- 22. Sự khác biệt giữa heuristic và thuật toán là gì?
- 23. Sự khác biệt giữa decodeURIComponent và decodeURI là gì?
- 24. Sự khác biệt giữa \ r và \ n là gì?
- 25. Sự khác biệt giữa phần .got và .got.plt là gì?
- 26. Sự khác biệt giữa ascx và .cshtml là gì?
- 27. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 28. Sự khác biệt giữa Thông báo và pynotify là gì?
- 29. Sự khác biệt giữa to_a và to_ary là gì?
- 30. sự khác biệt giữa callback là gì và hứa
Xem thêm http://stackoverflow.com/questions/15202997/what-is-the-difference-between-canonical-name-simple-name-and-class-name-in-jav – Anush
@Anush vui nhộn, tôi đã không nhìn thấy cái đó khi nhìn nó, chỉ lớn hơn tôi một tháng. Cảm ơn – durron597