如何在java中获得类似`MyClass<String>.class`的东西

Posted

技术标签:

【中文标题】如何在java中获得类似`MyClass<String>.class`的东西【英文标题】:How to get something like `MyClass<String>.class` in java 【发布时间】:2016-03-16 04:43:46 【问题描述】:

我正在尝试创建一个自定义ArgumentExtractor in Ninjaframework,我必须在其中创建一个实现ninja.params.ArgumentExtractor&lt;T&gt; 的类,该类具有public Class&lt;T&gt; getExtractedType() 方法

import java.util.Optional;
class OptionalParamExtractor implements ArgumentExtractor<Optional<String>> 
    ...
    @Override
    public Class<Optional<String>> getExtractedType() 
        return Optional<String>.class; // Compiler don't let me do this.
    

return Optional&lt;String&gt;.class; 行,出现语法错误。在这种情况下,如何正确返回 Class&lt;Optional&lt;String&gt;&gt; 类型的对象?我试过了

    @Override
    public Class<Optional<String>> getExtractedType() 
        return Optional.of("").getClass();
    

但是没用,报错Type mismatch: cannot convert from Class&lt;capture#1-of ? extends Optional&gt; to Class&lt;Optional&lt;String&gt;&gt;

【问题讨论】:

你可以直接施放它并抑制警告吗? return (Class&lt;Optional&lt;String&gt;&gt;) Optional.of("").getClass(); 【参考方案1】:

只需返回 Optional.class。类型参数&lt;String&gt; 无论如何都不会在擦除后继续存在。您永远无法在运行时获得该部分。

【讨论】:

以上是关于如何在java中获得类似`MyClass<String>.class`的东西的主要内容,如果未能解决你的问题,请参考以下文章

C#:你如何获得一个类的基类?

用字典 <String,MyClass> 在 C# 中填充 WPF DataGrid

使用java 8迭代和过滤两个列表

如何从对象列表中获取不同的列表?

如何动态转换模板类

如何通过读取“[MyClass class]”的行来修复“Interface Builder 文件中的未知类 <MyClass>”错误?