Java8:如何获取java.util.Optional类的内部类型?

Shv*_*alb 1 java reflection

我有一个类型的对象:Optional<String>我想在运行时知道什么是泛型类型Optional- 意思是'字符串'.

我试过了:

obj.getClass()
Run Code Online (Sandbox Code Playgroud)

但这会回来 java.util.Optional

然后我试过,

obj.getParameterizedType();
Run Code Online (Sandbox Code Playgroud)

但这并没有返回它有Class <>对象.

任何的想法??

Jon*_*eet 6

没有类型的对象这样的东西Optional<String>.类型擦除意味着只是 Optional在执行时.如果您有一个类型的字段或参数Optional<String>,那么可以在执行时检索信息 - 但对象本身并不知道它.

基本上,这里没有什么特别的Optional<>- 它具有与使用相同的限制List<>......虽然它是最终的,但你甚至不能使用像Guava这样的东西使用的任何变通方法TypeToken.

有关详细信息,请参阅类型擦除Java泛型常见问题解答.