2017-07-27 55 views
2

我有Class<?>這個字段。我有一個方法,它必須在Jackson的幫助下將字符串投射到對象上。如何將<?>類轉換爲<T>類?

private Class<?> myType = ...; 
private String jsonRepresentationOfObject = ....; 
ObjectMapper mapper = new ObjectMapper(); 

public <T> T get() { 
    return mapper.readValue(jsonRepresentationOfObject, myType); 
} 

是否有可能投myTypeT?或者這是不可能的,因爲類型擦除?

+0

爲什麼不使用'類'? – SilverNak

+0

@SilverNak我有不同的類型,所以我不能使用它。 – Max

+0

簽名' T get()'說:「我不在乎'myType'是什麼類型,我期望'T'」。你認爲鑄造'myType'會完成什麼? – shmosel

回答

2

如果你是絕對相信的readValue結果將是類型的T你可以這樣做:

public <T> T get() { 
    return (T)mapper.readValue(jsonRepresentationOfObject, myType); 
} 

你將不得不爲@SuppressWarnings選中蒙上雖然。

在其他語言(如可與Java互操作的Kotlin)中,您可以使用reified generics,但由於類型擦除,它不在Java中。

如果readValue結果不是T那麼你會得到一個ClassCastException所以明智地使用這一點。

+0

*如果readValue的結果不是'T',那麼你將得到'ClassCastException' *。不必要。因此警告。 – shmosel

-1

這是不可能的,這要歸功於類型刪除。這就是爲什麼Java中的某些庫函數會傳入一個除了執行.getClass()之外的任何類都不用的類的實例。其實我現在寫的代碼非常相似,最後我在(T returnType)(相當於)的等級上籤了名,然後在readValue打電話,我通過了returnType.getClass()

相關問題