2013-09-05 18 views
6

Mam klasę, która implementuje Serializable. W klasie jest inny obiekt klasy, który nie implementuje serializacji. Co należy zrobić, aby serializować członka klasy.Serializacja zmiennej klasy, która nie implementuje serializacji

Moja klasa jest coś takiego

public class Employee implements Serializable{ 
    private String name; 
    private Address address; 
} 


public class Address{ 
    private String street; 
    private String area; 
    private String city; 
} 

Tutaj nie mam dostępu do klasy adresowej, aby go wdrożyć Serializable. Proszę pomóż. Z góry dzięki

+0

Czy trzeba korzystać z serializacji Java? –

Odpowiedz

3

Oczywiście istnieje oczywiste rozwiązanie, aby umieścić na nim Serializable. Rozumiem, że nie zawsze jest to możliwe.

Być może możesz przedłużyć Address i umieścić Serializable na dziecku. Następnie zmieniasz go tak, aby Employee miał pole Child zamiast pola Address.

Oto kilka innych rzeczy do rozważenia:

  • Ty może zachować pole Employee.address jako typ Address. Możesz serializować, jeśli wywołasz Employee.setAddress(new SerializableAddress())
  • Jeśli Address ma wartość null, możesz serializować całego pracownika, nawet jeśli typ Address nie jest możliwy do serializacji.
  • Jeśli oznaczysz Address jako przejściowy, pominiesz próbę serializacji Address. To może rozwiązać twój problem.

Istnieją również inne struktury "serializacji", takie jak XStream, które nie wymagają działania interfejsu znacznika. To zależy od twoich wymagań, czy to jest opcja.

+0

Ja bym ** nie ** rozszerzyć. Członkowie i tak są prywatni. Utwórz klasę 'SerializeableAdress', która powinna być dokładną kopią' Adress' i uczynić ją serializowalną (oczywiście ...). – mike

+0

@mike Są prywatne, ale już są "Serializable". Czy to nie będzie problem? –

+0

Czy możemy w jakikolwiek inny sposób, z wyjątkiem rozszerzenia klasy adresu ?? – user2047302

1

Możesz bezpośrednio przekształcić klasę adresów w tę klasę, ponieważ nie masz dostępu do jej modyfikacji.

Istnieje kilka opcji:

  • utworzyć podklasę klasy adresowej i użyj go. Możesz oznaczyć tę klasę jako serializowalną.
  • Oznacz adres jako przejściowy.

Proszę spojrzeć na ten stackoverflow linku

+0

Również ta klasa jest używana w wielu innych logikach. Jeśli muszę stworzyć nową klasę, która jest dokładnie taka sama, będę musiał przepisać tak wiele części aplikacji. – user2047302

+0

Możesz po prostu odziedziczyć tę klasę bez nadpisywania żadnej z metod w niej. Będzie równie dobry jak klasa podstawowa. –

0

Jeśli masz możliwość używania 3rd biblioteki strona dla serializacji, a następnie można użyć na przykład kryo. Ma to domyślną serializację, która nie wymaga implementowania interfejsów ani pól opisowych.

Możesz sprawdzić Which is the best alternative for Java Serialization?, aby uzyskać więcej alternatyw.

Powiązane problemy