首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >simple-framework -如何将成员传递给超类

simple-framework -如何将成员传递给超类
EN

Stack Overflow用户
提问于 2013-12-05 09:30:05
回答 2查看 383关注 0票数 0

我正在尝试序列化一个简单的层次结构:

代码语言:javascript
复制
public class RootClass {
    @Element
    private final int a;

    public RootClass( int a) {
        this.a = a;
    }
}

class SubClass extends RootClass {

    @Element(name="b")
    int b;

    public SubClass() {
        super(0);
        this.b=0;
    }
}

当我跑的时候

代码语言:javascript
复制
SubClass sub = new SubClass();
Serializer serializer = new Persister();
StringBuilderWriter writer = new StringBuilderWriter(1000);
serializer.write(sub, writer);

我得到了:

代码语言:javascript
复制
ConstructorException: Default constructor can not accept read only 
@org.simpleframework.xml.Element(name=, data=false, type=void, required=true) 
on field 'a' private final int 
com.informatica.b2b.structurediscovery.serialization.tests.RootClass.a in class 
com.informatica.b2b.structurediscovery.serialization.tests.SubClass

我找不到任何方法让它工作。

EN

回答 2

Stack Overflow用户

发布于 2013-12-05 10:28:38

什么是序列化程序?如果要序列化对象,则应实现接口Serializable。下面是我的代码:

代码语言:javascript
复制
public class RootClass implements Serializable{
    private final int a;

    public RootClass(int a) {
        this.a = a;
    }

    public void print(){
        System.out.println(a);
    };
}
public class SubClass extends RootClass {
    int b;

    public SubClass() {
        super(0);
        this.b = 0;
    }

    public void print() {
        super.print();
    }
}

        SubClass sub = new SubClass();
        sub.print();
        try {
            File file = new File("SubClass");
            if (!file.exists())
                file.createNewFile();
            FileOutputStream fileOut = new FileOutputStream(file);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(sub);
            out.close();
            fileOut.close();
        } catch (IOException i) {
            i.printStackTrace();
        }
票数 0
EN

Stack Overflow用户

发布于 2013-12-07 08:14:19

你需要传入一个像这样的值。

代码语言:javascript
复制
class SubClass extends RootClass {

    @Element(name="b")
    int b;

    public SubClass(@Element(name="a")int a) {
        super(a);
        this.b=0;
    }
}

或者试试这个

代码语言:javascript
复制
class SubClassSubstitute  {

    @Element
    int a;

    @Element
    int b

    public SubClassSubstitute(@Element(name="a")int a, @Element(name="b")int b){
       this.a = a;
       this.b = b;
    }

    @Resolve
    public SubClass resolve() {
       return new Subclass(a)
    }
}


class SubClass extends RootClass {

    @Element(name="b")
    int b;

    public SubClass(@Element(name="a")int a) {
        super(a);
        this.b=0;
    }

    public SubClassDelegate replace() {
       return new SubClassSubstitute(a, b);
    }
}

以上代码与java object中的readResolve()和writeReplace()的工作方式相同

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20389687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档