This question already has an answer here:
Is there a way to find the type of a template (generic) parameter in Java?
                                
                                    (1个答案)
                                
                        
                                6年前关闭。
            
                    
我不确定这是否可能,但如果可以,这对我有很大帮助:

鉴于:

public interface Foo<T> {

    public void onUpdate(T t);
}


如果我有一个实现Foo的类的实例,是否可以获取泛型?

public void someMethod(byte[] bytes) {
    /*
     * this.bar implements Foo<ExampleType>
     *
     * I want to convert bytes to ExampleType using GSON but don't know the type.
     *
     * this.bar.onUpdate(...)
     */
}


创建this.bar实例时,能否获得使用的通用类型?

最佳答案

不,您无法在Java中获得通用类型,由于类型擦除,该信息在运行时不可用。

您可以为具体类型(例如,

interface FooExampleType extends Foo<ExampleType>{

}


我还要指出的是,在泛化了接口之后,如果您感觉需要获取泛型参数的类型,那么代码的设计就有些问题了。如果您在代码中遵循适当的多态行为,那么在生成代码之后,您就不会感到需要获取类型。

09-10 05:57
查看更多