1

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>

正直なところ、今のところ、これがかなり大きなハックなしで可能であるとは思えませんが、少なくともアイデアを共有しています.

4

1 に答える 1

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); 
于 2010-02-03T20:56:11.277 に答える