簡體   English   中英

Java8:如何獲取java.util.Optional類的內部Type?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM