2016-04-28 12 views
8

Quindi è valida per verificare l'uguaglianza di classe in questo modo:Le istanze di classe Class sono garantite come singleton per classloader?

if (object.getClass() == anotherObject.getClass()) { 

} 

Probabilmente la risposta è sì perché la classe classe non ignorare equals() modo che appaia come Object.equals() vale per l'uguaglianza di classe. Ma sarei interessato se questo è documentato da qualche altra parte. Grazie.

risposta

6

Fare riferimento alla JLS Section 12.2:

caricatori di classe ben educati mantengono queste proprietà:

  • dato lo stesso nome, una buona classe loader dovrebbe sempre restituiscono lo stesso oggetto di classe.
  • ...

Un class loader malintenzionato potrebbe violare queste proprietà. Tuttavia, non è in grado di compromettere la sicurezza del sistema di tipi, perché la Java Virtual Machine protegge da questo.

Quindi, se le istanze sono di classi caricate dallo stesso programma di caricamento classi, è possibile testare l'utilizzo dell'identità.

Problemi correlati