繁体   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