【问题标题】:How to alias java.lang.Integer using XStream?如何使用 XStream 为 java.lang.Integer 起别名?
【发布时间】:2010-02-03 20:54:02
【问题描述】:

我正在调整 XStream 输出,得到以下结果:

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

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

有什么诀窍?

谢谢!

编辑

我意识到这个问题不够清楚。我感兴趣的是 not 给元素名称起别名(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>

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

【问题讨论】:

    标签: java alias xstream


    【解决方案1】:

    显然是 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); 
    

    【讨论】:

    • 如果 .alias(String, Class) 真的做到了我认为的和它所说的(xstream.codehaus.org/javadoc/com/thoughtworks/xstream/…),那么这段代码不是毫无意义地将同一个类实现为许多名称吗?这正是我尝试过的一件事;我很想看看这段代码生成的输出。
    • 我不知道这不是我的代码,我只是把它作为一个例子来回答你的问题。
    • 这就是我想的,还是谢谢你!我知道 XStream 在早期版本中存在“问题”,因为(取消)装箱和类似的事情,您必须使用别名 int.class 而不是 Integer.class ......我想这可能是一些需要解决的问题。
    • 我认为对 alias 的调用将为找到的第一个 Integer 类型的变量创建一个别名,然后下一个别名为找到的下一个 Integer 类型的变量等等...
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2012-09-21
    相关资源
    最近更新 更多