2010-02-02 289 views
1

我正在为长类名创建别名...它工作得很好,但其中一个序列化类是私有内部类。除了将其公开化之外,我想不出一种为它创建别名的方法。我不喜欢这个解决方案,因为它不应该首先公开。但是,由于为其创建别名将可以更​​改包名和类名,而无需修改XML文件(因为第一个标记是完全限定的类名)。如何为私有内部类(使用XStream)创建别名?

这是我如何创建别名:

xstreamInstance.alias("ClassAlias", OuterClass.InnerClassToAlias.class); 

这就是为什么我需要的是内部类的公共访问。

所以,如果有人知道一个别名私人内部类的伎俩,我真的很想听到它。

+0

我知道XStream有两种模式:纯Java和增强。在增强模式下,XStream接缝可以达到更多私人/内部/静态/等等。成员比纯Java模式。但我相信在我的情况下,我不能认为将运行我的代码的所有JVM都将受到XStream增强模式(与JVM相关)的支持。 – Joanis 2010-02-04 13:59:31

回答

1

您可以创建类似以下的类并将您对xstreamInstance的引用传递给alias方法。

public class Parent { 
    public void alias(XStream x) { 
     x.alias("Kiddie", Parent.Child.class); 
    } 

    private class Child { 

    } 
} 
+0

看起来像个好主意。谢谢。所以我可以选择公开类还是添加一个小方法......小方法非常有趣,因为它不允许不应该做的事情(比如从别处实例化内部类)。 – Joanis 2010-02-04 14:00:49

+0

如果私人课程在您的控制范围内,这将起作用。如何为一个不在其控制下的私有类定义别名,如java.util.Arrays $ ArrayList?有任何想法吗? – 2013-09-13 11:28:23

+0

要回答我自己的问题:获取有关类的实例并在实例上使用getClass()。这个想法来自[这篇文章](http://comments.gmane.org/gmane.comp.java.xstream.user/5930) – 2013-09-13 11:49:09

0

如何使用别名的注释?

public class Parent { 
    @XStreamAlias("kiddie") 
    private class Child { 

    } 
} 

编辑:唉,嵌套类的注释的解析不是由XStream的要求得到解析的父类的时候支持。

+0

不适合我。与上面的例子不同的是,我的内部类是静态的(嵌套类)。 – Joanis 2010-03-01 15:56:23

+0

我看着XStream代码,实际上它不会隐式地分析嵌套类。 – 2010-03-02 12:00:48

+0

内部类的注解在自动检测模式下被正确解析,但它有一些含义。请参阅http://xstream.codehaus.org/annotations-tutorial.html#AutoDetect – 2014-12-10 17:01:02

相关问题