Non ne abbiamo bisogno se stiamo implementando Serializable. Quindi perché questa differenza? Come si relaziona al meccanismo attuale di serializzazione?Perché l'implementazione di Externalizable richiede un costruttore pubblico predefinito?
risposta
Una spiegazione approfondita (sebbene la grammatica dell'articolo possa essere migliorata) può essere trovata su http://www.jusfortechies.com/java/core-java/externalization.php. La risposta breve, per riferimento futuro nel caso in cui la pagina collegata scompare:
Externalizable è un'interfaccia estendibile Serializable. Contrariamente a Serializable, tuttavia, gli oggetti non vengono ripristinati semplicemente leggendo il serializzato serializzato, ma viene chiamato il costruttore pubblico e solo dopo che l'oggetto è stato creato, il suo stato viene ripristinato. Questo rende il ripristino più efficiente.
Modifica: Vedere anche What is the difference between Serializable and Externalizable in Java?.
Principalmente utilizzato per scopi di memorizzazione nella cache. Al fine di deserializzare deserialize attraverso i flussi, sarà necessario specificare come si desidera che il proprio oggetto sia deserializzato, quindi i due metodi forniti dal contratto nell'interfaccia Externalizable
: writeExternal
e readExternal
. Notare che Externalizable
estende Serializable
, quindi non è necessario implementare l'interfaccia Serializable
(sebbene sia un'interfaccia marcatore e non ci siano metodi da implementare effettivamente).
Per un'implementazione di esempio, dare un'occhiata a MimeType.
Un costruttore no-arg pubblico è necessario quando si utilizza l'interfaccia Externalizable.
perché in caso di Serializable
- readObject legge le informazioni richieste dal ObjectInputStream
- serializzazione utilizza meccanismo riflessione per ottenere i campi ei valori corrispondenti necessari.
- Serializza serializza tutti i membri dati (eccetto statico e transitorio).
Ma in caso di Externalizable
- Nessun meccanismo di riflessione utilizzato.
- L'utente non serializza tutti i membri di dati. Ecco perché per recuperare i valori dei membri che non sono esterni publicizzati non è richiesto alcun costruttore di argomenti.
- 1. Perché il costruttore di java.io.FileDescriptor è pubblico?
- 2. Classe sigillata - Perché rimuovere il Costruttore pubblico?
- 3. Spring richiede che tutti i bean abbiano un costruttore predefinito?
- 4. Perché PHP non ha un costruttore predefinito?
- 5. Costruttore pubblico e costruttore statico
- 6. Perché il mio Costruttore di classe Arduino richiede un argomento?
- 7. costruttore con un parametro predefinito
- 8. Perché un costruttore noexcept richiede l'istanziazione del distruttore?
- 9. Il costruttore predefinito di una classe vuota è pubblico. Ma come?
- 10. Accesso pubblico predefinito in scala
- 11. Externalizable or Serializable?
- 12. "Nessun costruttore predefinito appropriato disponibile" - Perché il costruttore predefinito è anche chiamato?
- 13. Progettazione senza costruttore predefinito
- 14. costruttore predefinito per int
- 15. Perché il compilatore fornisce il costruttore di copie predefinito
- 16. È un costruttore pubblico in una classe astratta un codesmell?
- 17. Costruttore predefinito in C
- 18. Perché Java non fornisce il costruttore predefinito, se la classe ha un costruttore parametrizzato?
- 19. Perché è richiesto un costruttore predefinito per oggetti esportati da un JAX-WS?
- 20. Perché il costruttore predefinito è richiesto in una classe genitore se ha un costruttore argomento-edito?
- 21. Perché un sindacato composto da membri con varianti costanti non ha alcun costruttore predefinito predefinito?
- 22. costruttore predefinito non trovato di tipo 'MyClass'
- 23. Il costruttore di copia deve essere privato o pubblico
- 24. Errore "CommentiController non ha un costruttore predefinito"
- 25. Perché InitializeComponent è pubblico
- 26. cosa fa un costruttore pubblico su una classe interna significa
- 27. Una classe può avere un costruttore sia pubblico che privato?
- 28. Valore predefinito per il costruttore di attributi?
- 29. Perché è possibile utilizzare il costruttore predefinito privato in decltype()?
- 30. Perché non viene fornito un costruttore di copie predefinito da un file volatile?
Di quale costruttore pubblico parli, visto che si tratta di un'interfaccia? O ti riferisci all'articolo collegato? –
Mi riferisco allo stesso costruttore della domanda, vale a dire quello della classe di implementazione. – jstarek
Ah, ho letto male. Grazie! La tua risposta sarebbe più pertinente se parlassi di come chiamare i metodi di implementazione nel costruttore. Detto questo, la tua risposta è migliore della mia. :) –