Java 如何将扩展另一个类的类外部化
导言 我有以下课程:Java 如何将扩展另一个类的类外部化,java,Java,导言 我有以下课程: public class Foo extends ArrayList<ElementsClass> implements Externalizable { Field field1 = new Field(); Field field2 = new Field(); ... } 观察 其中一个字段不可序列化,这就是我实现可外部化的原因。我只想把我能做的事情具体化 问题 虽然我知道如果ElementsClass是可序列化的,那么Arra
public class Foo extends ArrayList<ElementsClass> implements Externalizable {
Field field1 = new Field();
Field field2 = new Field();
...
}
观察
其中一个字段不可序列化
,这就是我实现可外部化
的原因。我只想把我能做的事情具体化
问题
虽然我知道如果
ElementsClass
是可序列化的,那么ArrayList
是可序列化的,但我不知道如何将类Foo
本身外部化。你的类Foo
不是已经外部化了吗
如果执行下面的语句,它应该在文件中写入带有外部化属性项的对象
Foo class = new Foo();
FileOutputStream fos = new FileOutputStream("temp");
ObjectOutputStream oos= new ObjectOutputStream(fos);
oos.writeObject(class );
我认为您应该尝试自定义序列化,就像这里描述的那样:试试这个:
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(super.toArray());
out.writeObject(field1);
out.writeObject(field2);
}
public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException {
Object[] arr = (Object[]) in.readObject();
for (int k=0; k<arr.length; k++) super.add(arr[k]);
field1 = (Field) in.readObject();
field2 = (Field) in.readObject();
}
public void writeExternal(ObjectOutput out)抛出IOException{
out.writeObject(super.toArray());
out.writeObject(字段1);
out.writeObject(字段2);
}
public void readExternal(ObjectInput in)引发IOException、ClassNotFoundException{
.readObject()中的对象[]arr=(对象[]);
对于(int k=0;kWhat classclass
你是说?java.lang.class
还是你自己的?用标准名称命名自定义类是不好的做法。对不起,我使用了一个不明确的名称,我的意思是Foo
类。你的代码会抛出一个NotSerializable
异常,因为我的Foo
类包含一个不可序列化的字段t serializable。这就是我实现Externalizable的原因。这就是为什么您使用Externalizable
来代替serializable
。在writeExternal
中,直接编写字段,这些字段是serializable
。对于非searializable
字段,手动获取内部属性,然后编写它们。您可以在readExternal
方法中使用了相同的reverse
。我不需要外部化不可序列化的字段。我只是跳过它们。问题是我需要外部化类本身,我不知道如何做。@Kits89您已经接受了与我在这里提到的答案非常相似的答案。不是吗当然,你还期待什么?
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(super.toArray());
out.writeObject(field1);
out.writeObject(field2);
}
public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException {
Object[] arr = (Object[]) in.readObject();
for (int k=0; k<arr.length; k++) super.add(arr[k]);
field1 = (Field) in.readObject();
field2 = (Field) in.readObject();
}