[英]How can i get generic type from a Class object?
假設下面的類
public class Message {
// some code
}
還有一個Spring Validator實現(不需要Spring知識)
public class MessageValidator implements Validator {
public boolean supports(Class clazz) {
if(clazz.isAssignableFrom(Message.class))
return true;
else if(<ANSWER>)
return true;
return false;
}
public void validate(Object command, Errors errorArray) {
if(command instanceof List)
for(Message message: (List) command)
validateMessage(message);
else
validateMessage((Message) command);
}
public void validateMessage(Message message, Errors errorArray) {
// do validation Message object
}
}
通知支持方法。 為了支持消息列表-List <Message>,在<ANSWER>中放置了什么?
問候,
泛型類型參數信息在大多數情況下不會在運行時保留,因此您沒有簡便的方法來訪問它。 基本上,即使它說List<Message>
它仍然可以是List<String>
。 如果不檢查所有元素,就無法將兩者區分開。
最好的辦法就是查看它是否實現List
。 歡迎輸入擦除。
值得記住以下區別:
對象沒有泛型類型。 實際的List
實例只是一個簡單的ArrayList
或LinkedList
或其他任何東西。 對象本身沒有泛型類型,也不關心泛型。
另一方面, 變量是通用聲明的。 因此,您將對象引用為List<Foo>
。 這允許編譯器強制類型安全,但你真正想說的是,你要治療 (無類型) List
作為列表Foo
,和你問的編譯器從會插入打電話阻止你Bar
s(例如)。
泛型只是在現有對象之上構建的編譯時“技巧”,因此在運行時檢查對象是否為List<Foo>
的實例沒有意義-它只是List
的實例。 此外,運行時檢查不會給您帶來任何好處,因為如果無法在編譯時進行檢查,那么無論如何您都不會從泛型中受益。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.