Quando si esamina il file di classe per org.apache.log4j.Logger
, viene definito un campo sintetico di tipo Class
con nome class$org$apache$log4j$Logger
.Oscuro campo e modificatore in Log4j Logger
Dall'esame del codice byte, è chiaro che questo campo rappresenta la classe autoreferenziale da un momento in cui il pool costante non può ancora fare riferimento ai tipi. Quello che trovo strano è il modificatore di questo campo che è 0x41008
che indica un campo private
, synthetic
(che posso seguire) ma che aggiunge un modificatore 0x40000
che non riesco a trovare documentato da nessuna parte.
Da dove viene questo modificatore al bit 19 e che cosa esprime? (Log4j è compilato per Java 1).
Non è il pool costante a cui non è possibile fare riferimento ai tipi, ma l'istruzione 'ldc' che non è stata in grado di caricare un riferimento come oggetto' Class' nella pila degli operandi. Ma il tipo di pool di cost costante di classe esisteva già per consentire di specificare il tipo 'this' e' super', implementare interfacce e dichiarare le classi di membri di riferimento. – Holger