我正在调整 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>
老实说,现在,我怀疑这在没有相当大的黑客攻击的情况下是可能的,但我至少分享了这个想法。