可能重复:
Generic type of local variable at runtime如何检查通用类型是否在java中实现了特定类型的通用接口?
我是新来的Java泛型,并从.NET世界的未来,我已经习惯了能够写一个方法是这样的:
public void genericMethod<T>(T genericObject)
{
if (genericObject is IList<String>)
{
//Do something...
}
}
该方法接受一个通用类型的对象,并检查对象是否实现一个特定版本的通用接口IList<>
,在这种情况下,IList<String>
。
现在,在Java中,我能够做到这一点:
public <T> void genericMethod(T genericObject)
{
if (genericObject instanceof Set<?>)
{
//Do something...
}
}
但
Java那样不让我做if (genericObject instanceof Set<String>)
据我所知,是因为类型擦除,通常在Java中,这将由类对象处理,并且我们将执行如下操作:
public <T> void genericMethod(T genericObject)
{
Class<OurTestingType> testClass = OurTestingType.class;
if (genericObject.getClass() == testClass)
{
//Do something...
}
}
,但因为我检查的类型是一个通用的接口,你可以这样做:
Class<Set<String>> testClass = Set<String>.class
那么,如何在Java中,我做检查,如果通用对象实现Set<String>
的具体类型?
泛型是一个编译时功能,因此您不能简单地获取运行时使用的特定泛型类型。你可以从内容或附加的参数中推断出它。 '类 t类' –