2010-02-03 53 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