2016-03-03 59 views
1

我需要實現具有類似於此的方法的Java接口:檢查Type實例等於泛型類型

boolean canWrite(Type t); 

對我來說,它應該返回true如果類型爲List<URI>

我雖然做了類似return t.equals(URI_LIST_TYPE),但我不知道如何獲得代表List<URI>Type的實例。

有沒有一種漂亮的方式來做到這一點?

回答

2

你需要一個型令牌,例如the one in Guava所使用這樣

new TypeToken<List<String>>() {} 

這工作,因爲(匿名)的子類保留有關在運行時的類型參數的信息,然後通過反射視察庫。

作爲附帶節點,設計與反思涉及的API時,不要使用Class<E>作爲輸入參數,如果參數化類型可以發揮作用

+0

我不使用番石榴,寧可不包括它只是爲了這個。 – holmis83

0

既然我已經使用春天我發現ParameterizedTypeReference class有用。 (我猜它類似於番石榴的TypeToken)。在我的情況:

URI_LIST_TYPE = (new ParameterizedTypeReference<List<URI>>() {}).getType(); 

也有比較作爲字符串的可能性:

t.toString().equals("java.util.List<java.net.URI>") 

或用的Java 8了更明確的行爲:

t.getTypeName().equals("java.util.List<java.net.URI>")