Java c类是否实现接口<;字符串>;

Java c类是否实现接口<;字符串>;,java,class,interface,polymorphism,instanceof,Java,Class,Interface,Polymorphism,Instanceof,我有这个界面: interface MyInt<T> { public void foo(T t); } 每次尝试添加字符串“sublass”(甚至不知道T的正确名称)都会导致编译错误。有办法吗 我想测试一个类是否不仅实现了MyInt,而且该类是否实现了MyInt 你可能想做一些类似的事情 Class<MyInt<String> > c = MyInt<String>.class; Class c=MyInt.Class; 但由于类

我有这个界面:

interface MyInt<T> {

    public void foo(T t);
}
每次尝试添加字符串“sublass”(甚至不知道T的正确名称)都会导致编译错误。有办法吗

我想测试一个类是否不仅实现了MyInt,而且该类是否实现了MyInt

你可能想做一些类似的事情

Class<MyInt<String> > c = MyInt<String>.class;
Class c=MyInt.Class;
但由于类型擦除,这是不可能的。请参阅以获得非常好的解释

为了仍然能够检查您的类是否实现了使用某些特定类型的接口,您可以检索给定类的泛型类型参数并检查其类型:

Class c0 = MyString.class;
Class c1 = MyDouble.class;

ParameterizedType c0Type = (ParameterizedType) c0.getGenericInterfaces()[0];
Class<?> type0Class = (Class<?>) c0Type.getActualTypeArguments()[0];

ParameterizedType c1Type = (ParameterizedType) c1.getGenericInterfaces()[0];
Class<?> type1Class = (Class<?>) c1Type.getActualTypeArguments()[0];

System.out.println(type0Class.isAssignableFrom(String.class));  // true
System.out.println(type1Class.isAssignableFrom(String.class));  // false
Class c0=MyString.Class;
类别c1=MyDouble.Class;
ParameteredType c0Type=(ParameteredType)c0.getGenericInterfaces()[0];
类type0Class=(类)c0Type.getActualTypeArguments()[0];
ParameteredType c1Type=(ParameteredType)c1.getGenericInterfaces()[0];
类type1Class=(类)c1Type.getActualTypeArguments()[0];
System.out.println(type0Class.isAssignableFrom(String.class));//真的
System.out.println(type1Class.isAssignableFrom(String.class));//假的

这应该适用于您的特殊情况。当您实现多个接口和/或使用多个泛型类型参数时,需要调整数组索引。

您应该能够向MyInt添加一个getter,该getter返回T类。
公共类getImplementedClass(){return T.getClass();}
@BobDalgleish
MyInt
是一个接口。不能将方法实现添加到接口。您需要在每个实现类中都这样做,这会使整个方法变得无用。MyInt.class是我尝试的第一件事,谢谢,这正是我想要的。
Class<MyInt<String> > c = MyInt<String>.class;
Class c0 = MyString.class;
Class c1 = MyDouble.class;

ParameterizedType c0Type = (ParameterizedType) c0.getGenericInterfaces()[0];
Class<?> type0Class = (Class<?>) c0Type.getActualTypeArguments()[0];

ParameterizedType c1Type = (ParameterizedType) c1.getGenericInterfaces()[0];
Class<?> type1Class = (Class<?>) c1Type.getActualTypeArguments()[0];

System.out.println(type0Class.isAssignableFrom(String.class));  // true
System.out.println(type1Class.isAssignableFrom(String.class));  // false