Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB重写抽象方法_Java_Xml_Jaxb_Xsd - Fatal编程技术网

Java JAXB重写抽象方法

Java JAXB重写抽象方法,java,xml,jaxb,xsd,Java,Xml,Jaxb,Xsd,我对JAXB和将XSD文件解析为Java类有点陌生。 计划是有一个抽象类和多个扩展抽象类的类。所有子类都必须重写特定的方法。 实现这一目标的最佳途径是什么?希望有人能给我一个提示。 基本上,我现在已经完成了这个实现: 抽象类XSD说明: <xs:complexType name="DataObject" abstract="true"> <xs:sequence> <xs:element name="value" type="xs:strin

我对JAXB和将XSD文件解析为Java类有点陌生。 计划是有一个抽象类和多个扩展抽象类的类。所有子类都必须重写特定的方法。 实现这一目标的最佳途径是什么?希望有人能给我一个提示。 基本上,我现在已经完成了这个实现:

抽象类XSD说明:

<xs:complexType name="DataObject" abstract="true">
    <xs:sequence>
        <xs:element name="value" type="xs:string"/>
        <xs:element name="dataType" type="xs:string"/>
        <xs:element name="match" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

现在,我想覆盖子类XSD描述文件中“DataObject”抽象类的“match”对象的getter。
提前感谢。

请注意,JAXB不能生成抽象类的实例;因此,您需要将xml标记绑定到DataObject的具体子类

下面的示例显示了一个具体的StringMatchDataObject类;其他类可以遵循相同的结构:

public abstract class DataObject {

  private String value;
  private String dataType;

  public String getValue() {
    return value;
  }
  public void setValue(String value) {
    this.value = value;
  }
  public String getDataType() {
    return dataType;
  }
  public void setDataType(String dataType) {
    this.dataType = dataType;
  }

  public abstract String getMatch();
  public abstract void setMatch(String match);
}



您想重写
getMatch
方法做什么?基本上,我想创建一个默认类类型的不同子类。假设我的基础是“汽车”,子类是“法拉利”、“保时捷”。getMatch将返回大小或马力是否重要。理想情况下,getMatch方法的返回类型会有所不同。
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="DataObject")
public class StringMatchDataObject extends DataObject {

  private String match;

  @Override
  public String getMatch() {
    return match;
  }

  @Override
  public void setMatch(String match) {
    this.match = match; 
  }

}
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class AppRun {

  public static void main(String[] args) throws JAXBException {

      StringMatchDataObject stringMatchDataObject = new StringMatchDataObject();
      stringMatchDataObject.setDataType("data type");
      stringMatchDataObject.setMatch("STRING MATCH");
      stringMatchDataObject.setValue("value");

      JAXBContext context = JAXBContext.newInstance(StringMatchDataObject.class);
      Marshaller m = context.createMarshaller();
      m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
      m.marshal(stringMatchDataObject, System.out);
  }

}