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>
ご覧のとおり、要素名は適切にエイリアス化されていますが (2 番目のリスト)、それをデータとして使用すると、クラス名を短縮する方法が見つかりません。関連する XStream.alias* メソッドのほとんどを試しました。私が望むのは(最初のリストの場合)のようなものです:
<list>
<java-class>int</java-class>
<java-class>long</java-class>
<java-class>double</java-class>
<java-class>float</java-class>
</list>
正直なところ、今のところ、これがかなり大きなハックなしで可能であるとは思えませんが、少なくともアイデアを共有しています.