2013-05-31 18 views
8

Java'da serileştirme ve diğer dillerde de biraz okumaya başladım, ancak genel bir dersim varsa ve bir örneğini dosyaya kaydetmek istiyorum.Java'da genel bir sınıf nasıl serileştirilir?

kod örneği

public class Generic<T> { 
    private T key; 
    public Generic<T>() { 
    key = null; 
    } 
    public Generic<T>(T key) { 
    this.key = key; 
    } 
} 

nedir Nesne bu tür tasarruf etmenin en iyi yolu nedir? (Tabii benim gerçek ceneric sınıfta daha var, ama sadece gerçek fikir merak ediyorum.)

+3

Tıpkı diğer sınıf olarak: o 'Serializable' arabirimini' uygulamak olun:) sp00m @ ' – sp00m

+0

: bazen sınıfını değiştirmek mümkün değildir. Muhtemelen durum burada değil;) – Burkhard

cevap

17

You zamanki gibi genel sınıf Serializable yapma ihtiyacını. alanlar jenerik türlerini kullanarak deklare ise

public class Generic<T> implements Serializable {...}

, sen onlar Serializable hayata geçirmesi gerektiğini belirtmek için isteyebilirsiniz.

public class Generic<T extends Serializable> implements Serializable {...}

burada nadir Java sözdizimi dikkat ediniz. Eğer istemiyorsanız

public class Generic<T extends Something & Serializable> implements Serializable {...}

+0

Ty Bu cevabı tercih ediyorum çünkü bu şeyi sınıfıma eklemek benim için daha kolay ... Her şeye sahipim var ... seri hale getirilebilir, ancak kaydetmem için ObjectOutputStream'i denediğimde. Programım donuyor. – Leolian

+0

"Serializable" uygulama kapsülleme ve bilgi gizlemeyi kırıyor; Tüm özel ve paket-özel üyeler, sınıfın ihraç edilen API'sinin bir parçası haline gelir. Bu, potansiyel güvenlik açıklarını ortaya çıkarır ve sınıfı daha kırılgan hale getirebilir. 'Seri hale getirilebilir' uygulama kararı büyük bir dikkatle yapılmalı ve seri hale getirilmiş form dikkatle tasarlanmalıdır (Efffective Java, 2nd Ed). – scottb

0

(veya olamaz) Serializable arayüzü uygulamak, XStream kullanabilirsiniz. İşte kısa bir tutorial. Senin durumunda

:

XStream xstream = new XStream(); 
Generic<T> generic = ...;//whatever needed 
String xml = xstream.toXML(generic); 
//write it to a file (or use xstream directly to write it to a file) 
+0

"Serializable" ın uygulanmasına yönelik bir başka alternatif de, "Externalizable" (kendi başına "Serializable") 'ı genişletmektir. – scottb

İlgili konular