Ho scoperto che le classi con metodo di default uguale ha diverse istanze di metodo meta oggetto . Perché è così? A prima vista non sembra ottimale perché gli oggetti metodo sono immutabili.Perché più istanze dell'oggetto Method sono per i metodi ereditati
risposta
Sfortunatamente, gli oggetti Method
sono non immutabili. Poiché Java 2, Method
estende AccessibleObject
, che ha il metodo setAccessible(boolean)
.
Quindi, non solo i metodi hanno una proprietà mutabile, questo flag ha impatti sulla sicurezza che non consentono la condivisione degli oggetti Method
.
Nota che sotto il cofano, Method
oggetti condividono il loro stato immutabile comune tramite un oggetto delegato, quindi quello che si ottiene da Class.getMethod
è solo un oggetto di front-end a basso costo che consiste di quella bandiera mutevole e un riferimento al metodo canonica condiviso rappresentazione.
Uguale metodo di oggetto non è finale, avrebbe dovuto essere reimplementato dalla classe X
Questo in realtà non risponde alla domanda. – biziclop
cosa intendi? Chiede perché il loro è un metodo di differenza tra due uguali. Dico che la classe X avrebbe dovuto reimplementare gli uguali. Dice che non è possibile perché tutti i metodi di Object sono immutabili. Dico che non è vero, e perché gli uguali non hanno l'indicatore finale. – sab
Chiede perché ci sono due diversi oggetti 'Metodo' per due classi dove ci sono * non * due diversi metodi' equals() '. E lui ** non ** dice che tutti i metodi di 'Object' sono immutabili. Leggi la domanda. – EJP
Il codice seguente stampa false
anche per due Method
oggetti che si riferiscono alla stessoMethod
nella stessa classe:
Method m1 = A.class.getMethod("equals", Object.class);
Method m2 = A.class.getMethod("equals", Object.class);
System.out.println(m1 == m2);
È quindi inattiva durante comportamento singoletto per Method
oggetti concernenti il metodo in due diverse classi.
Non penso ci sia alcuna ragione teorica, probabilmente non è solo un'ottimizzazione che porterebbe un notevole miglioramento nella pratica per il suo prezzo. – biziclop
Provare a convertire entrambi in stringa, se appartengono a classi diverse, la loro rappresentazione di stringa dovrebbe essere diversa. –
Che cosa ha a che fare gli oggetti Method immutabili perché non è ottimale? – EJP