如何使用XStream别名java.lang.Integer?

时间:2010-02-03 20:54:03

标签: java alias xstream

我正在调整XStream输出,我得到以下内容:

      <entry>
        <string>ahh</string>
        <java-class>java.lang.Integer</java-class>
      </entry>

所以我尝试为java.lang.Integer.class创建一个别名......不起作用。我为许多其他类创建了别名,它工作得很好。我也尝试别名int.class;没有运气。

诀窍是什么?

谢谢!

修改

我意识到这个问题不够明确。我感兴趣的是来为元素名称添加别名(XStream已经很好地完成了它)。我想为元素中包含的数据添加别名。没有什么比如一个例子了:

这是我做的一个测试:

import java.util.ArrayList;

import com.thoughtworks.xstream.XStream;

public class Main {

    public static void main(String[] args) {
        ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
        classes.add(Integer.class);
        classes.add(Long.class);
        classes.add(Double.class);
        classes.add(Float.class);

        ArrayList<Number> numbers = new ArrayList<Number>();
        numbers.add(new Integer(3));
        numbers.add(new Long(3));
        numbers.add(new Double(3));
        numbers.add(new Float(3));

        XStream xml = new XStream();
        xml.alias("inty", Integer.class);
        xml.aliasType("inty", Integer.class);
        xml.aliasPackage("jl", "java.lang");

        System.out.println(xml.toXML(classes));
        System.out.println(xml.toXML(numbers));
    }

}

哪个输出:

<list>
  <java-class>java.lang.Integer</java-class>
  <java-class>java.lang.Long</java-class>
  <java-class>java.lang.Double</java-class>
  <java-class>java.lang.Float</java-class>
</list>
<list>
  <int>3</int>
  <long>3</long>
  <double>3.0</double>
  <float>3.0</float>
</list>

正如您所看到的,元素名称具有良好的别名(第二个列表),但如果我将其用作数据,我找不到缩短类名的方法。我尝试了大多数相关的XStream.alias *方法。我想要的是(第一个列表):

<list>
  <java-class>int</java-class>
  <java-class>long</java-class>
  <java-class>double</java-class>
  <java-class>float</java-class>
</list>

老实说,现在,我怀疑这是不可能的,但是我至少可以分享这个想法。

1 个答案:

答案 0 :(得分:2)

显然是Integer.class

http://code.google.com/p/jpoco/source/browse/trunk/jpoco/src/main/jpoco/internal/xstream/XStreamFactory.java?r=300

xstream.alias("totalResults", Integer.class); 
             xstream.alias("startIndex", Integer.class); 
             xstream.alias("itemsPerPage", Integer.class); 
             xstream.alias("age", Integer.class);