Qual è la differenza tra Java Class.getName()
e Class.getCanonicalName()
?Qual è la differenza tra Nome e CanonicalName?
risposta
Si consideri il seguente programma:
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());
}
}
}
uscita:
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
così sembra che per le classi di base, ritornano la stessa cosa. Per le classi interne, getName()
utilizza la convenzione di denominazione $
(vale a dire ciò che viene utilizzato per i file .class) e getCanonicalName()
restituisce ciò che si utilizzerà se si stesse tentando di creare un'istanza della classe. Non è possibile farlo con una (poco-a) classe anonima, ecco perché getCanonicalName()
restituisce null.
È impossibile trovare la risposta alla tua domanda in pochi secondi. Sembra un inganno. I tempi della domanda e la risposta sono esattamente gli stessi. –
@MaciejZiarko C'è una casella di controllo in basso "rispondi alla tua domanda, stile Q & A. Ho voluto aggiungere la mia scoperta recente alla knowledge base in SO, perché non potevo trovarlo da nessuna parte. – durron597
Per riferimento futuro, non nominare la classe dopo il concetto stesso che stai cercando di esplorare/ritrarre ... – Andrew
- 1. SBT - Qual è la differenza tra nome e ID?
- 2. Qual è la differenza tra = e: =
- 3. Qual è la differenza tra Verilog! e ~?
- 4. Qual è la differenza tra? : e ||
- 5. qual è la differenza tra [[], []] e [[]] * 2
- 6. Qual è la differenza tra $ e $$?
- 7. Qual è la differenza tra ("") e (null)
- 8. Qual è la differenza tra dict() e {}?
- 9. Qual è la differenza tra " " e ""?
- 10. Qual è la differenza tra {0} e ""?
- 11. Qual è la differenza tra `##` e `hashCode`?
- 12. Qual è la differenza tra {0} e +?
- 13. Qual è la differenza tra .ToString() e + ""
- 14. qual è la differenza tra:.! e: r !?
- 15. Qual è la differenza tra ModelAndView e ModelMap?
- 16. Qual è la differenza tra hook e callback?
- 17. Qual è la differenza tra schema e dizionario dati?
- 18. Qual è la differenza tra `Enum.name()` e `Enum.toString()`?
- 19. Qual è la differenza tra concurrent.futures e asyncio.futures?
- 20. Qual è la differenza tra @Named e @Qualifier in primavera
- 21. Qual è la differenza tra funzioni e chiusure?
- 22. Qual è la differenza tra "Thread.currentThread(). GetName" e "this.getName"?
- 23. Qual è la differenza tra UIImage (named :) e UIImage (imageLiteralResourceName :)?
- 24. Qual è la differenza tra url.getFile() e getpath()?
- 25. Qual è la differenza tra "tutti" e "ciascuno" in gradle?
- 26. Qual è la differenza tra intXX_t e int_fastXX_t?
- 27. Qual è la differenza tra un pacchetto e un intento?
- 28. Qual è la differenza tra "è Nessuno" e "== Nessuno"
- 29. Unix: Qual è la differenza tra la fonte e l'esportazione?
- 30. Qual è la differenza tra il callback e la promessa
Vedere anche http://stackoverflow.com/questions/15202997/what-is-the-difference-between-canonical-name-simple-name-and-class-name-in-jav – Anush
@Anush funny, I non l'ho visto mentre lo guardavo, che è solo un mese più vecchio del mio. Grazie – durron597