item 74 di efficace libro Java v'è un paragrafo (2 ° comma dello scorso della voce 74) che cita come sotto:Effective Java No. 74 (sulla serializzazione): Implementare Serializable giudiziosamente
Le classi interne (elemento 22) non dovrebbero implementare serializzabili. Utilizzano i campi sintetici generati dal compilatore per memorizzare i riferimenti alle istanze e per memorizzare i valori delle variabili locali dagli ambiti . Come questi campi corrispondono alla definizione di classe è non specificato, come lo sono i nomi delle classi anonime e locali. Pertanto, la forma serializzata predefinita di una classe interna è ill- definita.
So che la classe interna utilizza il campo sintetico generato dal compilatore per memorizzare il riferimento alle istanze che includono, ad es. se la classe che racchiude è MyEnclosing e la classe interna è MyInner, il riferimento di chiusura è MyEnclosing.this. Ma non sono in grado di ottenere la parte BOLD. Per favore aiutami a capire il significato. Grazie!!!
grazie per il vostro sforzo. Fondamentalmente intendi dire che val $ a è la variabile memorizzata nella classe interna dal compilatore che (val $ a) fa parte della classe out. Ho ragione? Se sono corretto, qual è il problema non è serializzare la classe interiore. Fondamentalmente non sono in grado di ottenere il tuo "Ma i nomi esatti da utilizzare in questa situazione non fanno parte delle specifiche del compilatore". – Trying
Sono abbastanza sicuro che ho visto file di classe con una convenzione di denominazione che avrebbe chiamato la classe interna qui 'OuterClass $ metodo $ 1' invece di' OuterClass $ 1' (anche se ho provato diversi compilatori solo ora e non ero in grado per riprodurlo). Il punto è il il [spec] (http://jcp.org/aboutJava/communityprocess/maintenance/JLS/innerclasses.pdf) richiede solo che il compilatore di creare un nome univoco aggiungendo qualche combinazione di $ 's, lettere, e numeri dopo il nome della classe allegata. E se il nome della classe fosse cambiato, la deserializzazione fallirebbe. –
Sono un po 'confuso ... Perché il vostro anonimo classe 'Runnable' ottenere serializzato quando sei serializzazione' this'? Solo i campi della tua classe esterna vengono serializzati. E la domanda in realtà si riferisce alla classe interna/locale/anonima stessa che è 'Serializable' ... –