serialization - Overriding class signature in java -
i have class follows in .jar
file (library file):
class a{ //someimplementation }
i make implements serializable
interface follows:
class implements serializable { //the same implementation present in classa }
i not want decompile jar file, changing class signature , archiving again after compilation.
is there way writing hooks achieve this? kindly provide pointers/suggestions. ultimate aim achieve implementing serializable interface without modifying jar file.
you can achieve using serialization proxy pattern (effective java 2nd edition item 78)
a few links pattern :
http://jtechies.blogspot.com/2012/07/item-78-consider-serialization-proxies.html
http://java.dzone.com/articles/serialization-proxy-pattern
follow up: instance control in java without enum
make new class extends a
, serializable
. in order avoid serialization errors, however, because a
isn't serializable, need make serializationproxy creates new instance via constructor or factory method instead of normal java serialization mechanism of explicitly setting fields outside of constructor.
public class myserializablea extends implements serializable{ private final foo foo; private final bar bar; ... private object writereplace() { return new serializationproxy(this); } //this forces use serializationproxy private void readobject(objectinputstream stream) throws invalidobjectexception { throw new invalidobjectexception("use serialization proxy instead."); } //this private inner class our serialization private static class serializationproxy implements serializable { private final foo foo; private final bar bar; ... public serializationproxy(myserializablea mya) { this.foo = mya.getfoo(); this.bar = mya.getbar(); ...//etc } private object readresolve() { return new myserializablea(foo, bar,...); } } }
the downside when want serialize a
, have wrap in mya
. when deserializing, cast a
work fine.
Comments
Post a Comment