Domanda

Stavo usando l'attuazione Mersenne-Twister all'indirizzo http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java come una sostituzione drop-in per la classe predefinita java.util.Random. Tuttavia, quattro campi (un int, un valore booleano e due byte []) sono contrassegnati come transient. Ciò significa che non posso serializzare un oggetto di questa classe senza implementare funzionalità personalizzate.

La domanda è, c'è qualche ragione che questi campi sono contrassegnati transitoria? C'è qualche codice in là che contiene le informazioni che non ha alcun senso quando l'oggetto viene letto da un file? Ho rimosso il modificatore transient dai campi e sembra funzionare bene, ma non ho provato intensamente e quindi potrebbe esserci casi in cui si rompe?

Personalmente, non riesco a capire perché, dal momento che tutto ciò che è fatto in classe è aritmetica.

È stato utile?

Soluzione

Molto probabilmente il ragionamento che sta dietro rendendo tutti dei campi non statici della classe era transient modo che la classe MTRandom rimane compatibile binario con java.util.Random, da cui si estende.

Quindi, in teoria, si potrebbe serializzare un'istanza MTRandom, e deserializzare come istanza Random e tutto avrebbe funzionato.

Se questi campi non sono transient, allora sarebbero serializzato e diventare incompatibili.

Tuttavia, per quanto posso dire, rimuovendo i transienti non dovrebbe causare un problema per voi.

Altri suggerimenti

Dal commento alla serialVersionUID, sembra che l'autore non ha voluto prendere in considerazione la serializzazione. L'aggiunta di transient può aver soppresso alcuni avvisi del compilatore / IDE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top