This week's book giveaway is in the OO, Patterns, UML and Refactoring forum.
We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Question about Serialization Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Question about Serialization" Watch "Question about Serialization" New topic

Question about Serialization

Brian Legg
Ranch Hand

Joined: Nov 07, 2008
Posts: 488
I have 2 classes that implement the same interface and one of them also implements the Serializable interface. Now, when I try to serialize the class to the HD I get an exception ( I'm 99% sure that the class is "not serializable" due to the fact that the super class (the interface) is not serializable.

If I make the interface extend Serializable the whole thing runs perfectly smooth. Here's my problem though. I don't want to make the interface Serializable because other classes implement that same interface and I don't need or want them to be Serializable. How can I make my class Serializable without making it's inherited interface Serializable as well?

Also, I thought about doing custom serialization but the interface the 2 classes implement has absolutely no data, so there is nothing extra to serialize. It's just used as a tag so that any classes that implement it can all be added to the same collection. (passes the IS-A test).

I'm pretty sure this is considered an easy question. Any help is appreciated, and I hope that all made since. I would have posted code but there is a lot of it. Well, I guess I could make some mock code if no one understands my explanation.


~Currently preparing for SCJP6
Campbell Ritchie

Joined: Oct 13, 2005
Posts: 43948
If you don't want the other interface to extend Serializable: don't.
You need to go through the class to see whether there are any fields which are reference types which don't themselves implement Serializable. If there are, you have three options:
  • Make them implement Serializable
  • Label them "static"
  • Label them "transient"
  • You may not be able to implement any of those options. Fields labelled static or transient are not included when an object is serialised. You may have problems with transient fields; those need to be reinitialised when the object is de-serialised. The transient keyword is intended for things like passwords which ought to be deleted when the object is serialised.

    If the class itself doesn't implement Serializable, you can always add "implements Serializable" to the class heading. You can't serialise the objects otherwise. If a class implements Serializable (or any interface), remember all its subclasses will implement Serializable too.
    Brian Legg
    Ranch Hand

    Joined: Nov 07, 2008
    Posts: 488
    Thanks Campbell, you were right!

    "go through the class to see whether there are any fields which are reference types which don't themselves implement Serializable"

    I had forgotten that one of the objects I was serializing had another object reference in it that was not marked Serializable. The problem had nothing to do with the super class. It's fixed and working now.

    Rob Spoor

    Joined: Oct 27, 2005
    Posts: 20078

    For your reference, having a non-serializable super class is only a problem if that class does not have a constructor without parameters.

    As for custom serialization, there are three methods you can use for that:

    Usually you only need the first two. The third is mostly used in Singleton classes to make sure you can't create a copy by serializing and then de-serializing. By returning the sole singleton instance from this method the sole singleton instance is also returned when reading an object from an ObjectInputStream.

    SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6 - OCEJPAD 6
    How To Ask Questions How To Answer Questions
    Brian Legg
    Ranch Hand

    Joined: Nov 07, 2008
    Posts: 488
    Thanks Rob, I appreciate it!!
    I agree. Here's the link:
    subject: Question about Serialization
    It's not a secret anymore!