2013-10-18 307 views
1

我不知道这是可能的,但如果是这样,这将有助于我很多:Java的泛型和类型

考虑:

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实例时使用的泛型类型?

+5

简答题,没有。如果你需要这个类型,你可以添加'Class clazz'作为'someMethod'的参数。 – chrylis

+0

@chrylis我不这么认为。我知道你在说什么,但方法是在界面中定义的... – jjNford

+0

@chrylis是的我看过这个......但也有很多其他人都有不同的回应。如果这没有吸引任何牵引力,我会删除这篇文章。 – jjNford

回答

2

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

你可以有具体的类型,如独立的接口,

interface FooExampleType extends Foo<ExampleType>{ 

} 

此外,我想指出的是,泛型化的界面,如果你觉得有必要让一般的参数的类型,然后有后你的代码的设计有问题。如果你在你的代码中遵循适当的多态行为,那么在通过基因化之后,你不应该感到需要获得类型。

+0

设计很好。它是一个抽象的网络包装器(在库项目中),数据需要转换为Generic类型参数。应用程序定义了这种通用类型。我需要用于GSON转换的通用类型令牌。 – jjNford