1

我创建了一个通用的 JAXB 序列化类,如下所示:

public class JAXBSerializing<T>
    implements IXMLSerializing<T>
{
private final Class<T> mType;

public JAXBSerializing(Class<T> oType)
{
    mType = oType;
}

}

现在在我的代码中,当我用“普通”类实例化它时,它工作正常。

IXMLSerializing<String>strser = new JAXBSerializing<String>(String.class);

但是当我尝试使用泛型类时,会出现编译器错误:

MapEntry<String, String>e = new MapEntry<String, String>("Key", "Value");
IXMLSerializing<MapEntry<String, String>>serializer = new JAXBSerializing<MapEntry<String, String>>(MapEntry.class);

我尝试了各种组合,但没有一个有效。

IXMLSerializing<MapEntry<String, String>>serializer = new JAXBSerializing<MapEntry<String, String>>(MapEntry<String, String>.class);

Syntax error on token ">", void expected after this token

或者

IXMLSerializing<MapEntry<String, String>>serializer = new JAXBSerializing<MapEntry<String, String>>(MapEntry.class);
The constructor JAXBSerializing<MapEntry<String,String>>(Class<MapEntry>) is undefined

唯一有效的是当我像这样实例化一个虚拟对象时:

MapEntry<String, String>e = new MapEntry<String, String>("Key", "Value");
IXMLSerializing<MapEntry<String, String>>serializer = new JAXBSerializing<MapEntry<String, String>>((Class<MapEntry<String, String>>) e.getClass());

虽然这可行,但我想知道如何在没有该虚拟对象的情况下正确地将类作为参数传递。即便如此,由于不必要的强制转换,我收到了未经检查的类型警告,尽管对象都是正确的类型。

4

1 回答 1

1

您可以剥离构造函数上的类型参数并抑制警告

public JAXBSerializing(Class<?> oType)
{
    mType = oType;
}

那么这不应该产生编译器错误

IXMLSerializing<MapEntry<String, String>> serializer = new JAXBSerializing<MapEntry<String, String>>(MapEntry.class);
于 2013-06-20T06:27:06.210 回答