在我当前的JAXB marshaller应用程序中,我需要有条件地将一个元素写入xml。 让我看看我是否可以想到一个例子,而不是让它听起来像大学作业。
我有一个名为Student的类,其属性称为merit和status。并非所有学生都会有优异成绩。只有非新生学生才会有优点(被称为身份的财产会提供有关学生是否是新生的信息)。当我浏览学生列表并编组成xml时,我需要有条件地显示Merit。 如何使用JAXB处理XML元素的动态创建?我可以想到一个解决方案,我将我的Student课程分成FreshManStudents和OtherStudents,并将其作为@XMlTransient定义为Otherstudents。为了JAXB的目的,重构我的对象不是有点过分吗?
或者,我可以让getMerit adn中的逻辑让getMerit为Freshman学生返回NULL。假设JAXB忽略了null对象,那么这是解决问题的有效(读取优雅)方法吗?
感谢您的意见和建议
public class Student {
private Merit merit;
private String status;
public Merit getMerit() {
return merit;
}
public void setMerit(Merit m) {
merit= m;
}
public String getStatus() {
return status;
}
public void setStatus(String s) {
status= s;
}
}
答案 0 :(得分:0)
快速修复
或者,我可以让getMerit adn里面的逻辑有 getMerit为Freshman学生返回NULL。假设JAXB忽略null 对象,是一种有效(阅读优雅)的方法来解决问题吗?
这样可以使用,并匹配您的问题描述(如下):
我有一个名为Student的类,其属性称为merit和status。 并非所有学生都会有优异成绩。只有非新生才会 有优点(属性称为状态提供有关是否的信息 学生是否是新生)
关于继承
我可以想到一个解决方案,我将我的学生课分成了 FreshManStudents和OtherStudents并将优点定义为@XMlTransient 对于其他学生。重构我的对象不是有点矫枉过正 仅用于JAXB目的?
无论JAXB是否参与,您的用例都要求继承:
<强>学生强> 的
public class Student {
private String status;
public String getStatus() {
return status;
}
public void setStatus(String s) {
status= s;
}
}
的 NonFreshman 强> 的
public class NonFreshman extends Student {
private Merit merit;
public Merit getMerit() {
return merit;
}
public void setMerit(Merit m) {
merit= m;
}
}
了解更多信息