2010-02-03 182 views
1

我调整了XStream的输出,并且我得到以下几点:如何使用XStream别名java.lang.Integer?

 <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> 

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

回答

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); 
+0

如果.alias(字符串类)真的做什么,我觉得它和它说,它做什么(HTTP://xstream.codehaus .org/javadoc/com/thoughtworks/xstream/XStream.html#alias(java.lang.String,%20java.lang.Class)),是不是这个代码在许多名字中无意义地重复使用同一个类?这是我尝试过的一件事,我很好奇看到这段代码生成的输出。 – Joanis 2010-02-03 21:29:39

+0

我不知道它不是我的代码,我只是用它作为例子来回答你的问题。 – Woot4Moo 2010-02-03 21:40:50

+1

这就是我所想的,无论如何,谢谢你!我知道在之前的版本中,XStream有“问题”,因为(un)boxing和类似的东西,你必须别名int.class而不是Integer.class。我想这可能是一些需要解决的问题。 – Joanis 2010-02-03 22:02:19