Я щипая выход XStream, и я получаю следующее:Как псевдоним java.lang.Integer с помощью XStream?
<entry>
<string>ahh</string>
<java-class>java.lang.Integer</java-class>
</entry>
Так что я пытаюсь создать псевдоним для java.lang.Integer.class ... Не работает. Я сделал псевдонимы для многих других классов, и он работает отлично. Я также попытался создать псевдоним int.class
; не повезло.
Какая уловка?
Спасибо!
EDIT
я понял, этот вопрос не был достаточно ясен. Меня интересует не для псевдонима имени элемента (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>
Честно, прямо сейчас, я сомневаюсь, что это возможно без довольно большой хак, но я, по крайней мере разделяя идею.
Если .alias (String, класс) действительно делает то, что я думаю, что он делает и то, что он говорит, что делает (HTTP: //xstream.codehaus .org/javadoc/com/thoughtworks/xstream/XStream.html # alias (java.lang.String,% 20java.lang.Class)), разве этот код не реализует бессмысленно один и тот же класс для многих имен? И это одна вещь, которую я пробовал; Мне было бы интересно увидеть результат, сгенерированный этим кодом. – Joanis
Я не знаю, что это был не мой код, я просто использовал его в качестве примера, чтобы ответить на ваш вопрос. – Woot4Moo
Вот что я и предполагал, спасибо вам! Я знаю, что XStream имел «проблемы» в более ранних версиях, где вам приходилось использовать псевдоним int.class вместо Integer.class из-за (un) бокса и тому подобного ... Я думаю, это может быть немного что-то, что нужно исправить. – Joanis