简体   繁体   English

使用通用参数实例化通用类时出错

[英]Error when instantiating a generic class with a generic parameter

I have created a generic JAXB serializing class which looks like this: 我创建了一个通用的JAXB序列化类,如下所示:

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

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

} }

Now in my code when I instantiate it with a "normal" class, it works fine. 现在在我的代码中,当我使用“普通”类实例化它时,它可以正常工作。

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

But when I try to use a generic class I get a compiler error: 但是,当我尝试使用泛型类时,出现编译器错误:

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

I tried various combinations but none of them work. 我尝试了各种组合,但没有一个起作用。

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

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

or 要么

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

The only thing that works is when I instantiate a dummy object like this: 唯一有效的方法是当我实例化一个虚拟对象时,如下所示:

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());

While this works, I wonder how to properly pass the class as a parameter without that dummy object. 在此有效的同时,我想知道如何在没有该伪对象的情况下正确地将类作为参数传递。 And even so, I get an unchecked type warning because of the unneccessary cast, though the objects are all of the correct type. 即使这样,由于对象的类型都是正确的,但由于进行了不必要的强制转换,我仍然得到了未经检查的类型警告。

You can strip the type parameter on the constructor and surpress the warning 您可以剥离构造函数上的type参数并消除警告

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

Then this should not yield compiler error 那么这不会产生编译器错误

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM