2013-06-20 51 views
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()); 

雖然這個作品,我不知道如何正確地傳遞類作爲沒有該虛擬對象的參數。即便如此,由於不需要的轉換,我得到了未經檢查的類型警告,儘管對象都是正確的類型。

回答

1

可以剝去構造方法的類型參數和surpress警告

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

那麼這不應該產生編譯器錯誤

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

我使用'public JAXBSerializing(類 oType)'現在,避免另一個警告。 :)我認爲,泛型類型的語法存在問題。 – Devolus

+0

好啊!是的問號會做得更好 – gerrytan

+0

我更新了你的答案。當時甚至不需要SuppressWarning – Devolus