![](/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.