Rom*_*iel 1 java inheritance android simple-framework
我目前正在使用SimpleXML框架来解析XML文件,我正面临一个经常出现的问题.
收到的XML可以是这样的:
<root>
<B>
...
</B>
</root>
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
<root>
<C>
...
</C>
</root>
Run Code Online (Sandbox Code Playgroud)
我希望B和C扩展另一个类,比如A.
使用SimpleXML这样做的整洁方法是:
@Root(name="root")
class Root {
@Element(name="B", required="false")
private B b;
@Element(name="C", required="false")
private C c;
}
class B extends A {
}
class C extends A {
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以做一些我在SimpleXML文档中找到的东西,改变我的XML格式:
<root>
<A class="example.B"> // or "example.C"
...
</A>
</root>
Run Code Online (Sandbox Code Playgroud)
然后我的Java类:
@Root(name="root")
class Root {
@Element(name="A")
private A a;
}
class B extends A {
}
class C extends A {
}
Run Code Online (Sandbox Code Playgroud)
我真的很喜欢使用这个解决方案,但我不确定是否要在解析它之前完成在客户端更改XML的过程.问题是它无法在服务器端完成,因为我无法控制它.
所以我的问题是:
这是我唯一的解决方案吗?
在这种情况下,你们知道是否有一个快速的解决方案来改变客户端的xml文件?
我不知道如何进行继承,但我找到了一个使用接口的解决方案(在我的情况下这是好的)
诀窍是使用:
@Root(name="root")
class Root {
@ElementUnion({
@Element(name="B", type=B.class),
@Element(name="C", type=C.class)
})
private A a;
}
interface A {
}
class B implements A {
}
class C implements A {
}
Run Code Online (Sandbox Code Playgroud)
如果我们可以做继承同样的事情会很好.
更新:继承是可用的@ElementUnion.虽然文档中没有指定,但这也有效:
@Root(name="root")
class Root {
@ElementUnion({
@Element(name="B", type=B.class),
@Element(name="C", type=C.class)
})
private A a;
}
class A {
}
class B extends A {
}
class C extends A {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |