1

我正在调整 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>

老实说,现在,我怀疑这在没有相当大的黑客攻击的情况下是可能的,但我至少分享了这个想法。

4

1 回答 1

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); 
于 2010-02-03T20:56:11.277 回答