![](/img/trans.png)
[英]Is there a java8 standard library class that means “possibly with exception” in the same way as java.util.Optional means “possibly null”?
[英]Java8: How to get the internal Type of java.util.Optional class?
我有一個類型為Optional<String>
的對象,我想在運行時知道Optional
的通用類型是什么-意思是'String'。
我試過了:
obj.getClass()
但這返回java.util.Optional
然后我嘗試了
obj.getParameterizedType();
但這不會返回它具有Class <>對象。
任何想法??
沒有類型為Optional<String>
的對象。 類型擦除意味着執行時只有 Optional
。 如果您具有類型為Optional<String>
的字段或參數,則可以在執行時檢索該信息-但是對象本身不知道該信息。
基本上,這里的Optional<>
沒有什么特別的-它具有與使用List<>
...相同的局限性,盡管最后,您甚至不能使用Guava的TypeToken
類的東西所使用的任何解決方法。
有關更多詳細信息,請參見有關類型清除的Java泛型常見問題解答 。
如Jon Skeet的答案所述,您不能簡單地檢索泛型。 一種解決方法可能是這樣的:
Class<?> type = null;
if(optional.isPresent()) {
type = optional.get().getClass();
}
當然,當Optional為空時,這將無濟於事,但在某些情況下它可以工作。
正如其他答案所指出的那樣,如果您擁有的只是Optional對象的實例,那么您就不走運了。 但是,如果您具有定義Optional屬性的對象類,則可以執行以下操作:
Class clazz = (Class) ((ParameterizedType) MyClass.class.getDeclaredField("name-of-optional-field").getGenericType()).getActualTypeArguments()[0];
很難看,但是可以用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.