【问题标题】:JAXB 2.1 implementing Comparable<T> for the generated ClassJAXB 2.1 为生成的类实现 Comparable<T>
【发布时间】:2016-12-19 00:38:12
【问题描述】:
  • 使用 Jaxb 2.1 从 .xsd 生成 java 代码
  • 使用了jaxb2-basics插件
  • 想要生成类Fragment 来实现Comparable&lt;Fragment&gt;
public class Fragment implements Serializable, Comparable<Fragment> {
  ...
  public int compareTo(Fragment other) {
    .....
    return 0;
  }
}

使用下面的 jaxb 绑定文件

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:ci="http://jaxb.dev.java.net/plugin/code-injector"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    jxb:extensionBindingPrefixes="xjc" 
    jxb:version="2.1">
    <jxb:bindings>
        <jxb:globalBindings>
            <xjc:serializable uid="12343" />
        </jxb:globalBindings>
    </jxb:bindings>
    <jxb:bindings schemaLocation="../schemas/Fragment.xsd"
        version="1.0" node="/xs:schema">
        <jxb:bindings node="//xs:element[@name='Fragment']/xs:complexType">         
            <inheritance:implements>java.lang.Comparable</inheritance:implements>
            <ci:code>           
public int compareTo(Fragment other) {

    return fragmentVersion.compareTo(other.fragmentVersion);
}
            </ci:code>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

能够生成如下所示的类:

public class Fragment implements Serializable, Comparable {
  ...
  public int compareTo(Fragment other) {
    return fragmentVersion.compareTo(other.fragmentVersion);
  }
}

问题:如您所见,类生成为implements Comparable,而不是implements Comparable&lt;Fragment&gt;

我确定,遗漏了一些东西。任何解决问题的帮助表示赞赏。

【问题讨论】:

  • 你真的试过&lt;inheritance:implements&gt;java.lang.Comparable&amp;lt;Fragment&amp;gt;&lt;/inheritance:implements&gt;吗?
  • @lexicore,我尝试了&lt;inheritance:implements&gt;java.lang.Comparable&lt;Fragment&gt;&lt;/inheritance:imple‌​ments&gt;,它显示错误说需要关闭标签。刚刚尝试了您的建议,并且有效。这应该是一个答案,并且很高兴接受它。非常感谢。

标签: java jaxb2 maven-jaxb2-plugin jaxb2-basics


【解决方案1】:

JAXB2-Basics 支持泛型。

只需使用:

<inheritance:implements>java.lang.Comparable&lt;Fragment&gt;</inheritance:imple‌​ments>

【讨论】:

    【解决方案2】:

    在测试 lexicore 提供的解决方案时,注意到另一种解决问题的方法:

    <inheritance:implements><![CDATA[java.lang.Comparable<Fragment>]]></inheritance:implements>
    

    【讨论】:

    • 其实是同一个解决方案。只是一种不同的 XML 语法。
    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多