[英]How to check does interface with generic fit to class
我有一些通用類型interface DummyInterface<T>
的接口,我有 class 我必須設置接口
class DummyClass<T>{
public void setDummyInterface(DummyInterface<T> dummyInterface){
//set interface
}
}
想象一下我在DummyClass
中存儲具有不同 generics 的ArrayList
的情況。 當我從列表中得到 class 時,我不知道 class 的泛型,我想檢查接口是否具有相同的泛型; 例如我想這樣檢查
if(dummyInterface<SomeTypeIKnow>.getGenericType() == dummyClass.getGenericType()){
dummyClass.setDummyInterface(dummyInterface);
}
不能完全確定我理解您的問題,但是此代碼將使您能夠獲取對象的通用類型。 它們使您可以對對象的通用參數執行反射。
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericClassUtils {
public static <T> Class<T> getClassFromGeneric(
Object parentObj,
int oridnalParamterizedTypeIndex) throws Exception{
Type[] typeArray = getParameterizedTypeListAsArray(parentObj);
return (Class<T>)typeArray[oridnalParamterizedTypeIndex];
}
public static <T> Type[] getParameterizedTypeListAsArray(Object parentObj){
return ((ParameterizedType) parentObj.getClass()
.getGenericSuperclass())
.getActualTypeArguments();
}
}
也許通過這樣的調用:
Class clazz = getClassFromGeneric(dummyClass, 0);
if (clazz.isInstance(SomeTypeIKnow.class)){
dummyClass.setDummyInterface(dummyInterface);
}
只要可以在類型定義中捕獲參數,就可以使用TypeTools之類的方法來解析類型參數。 例如:
interface DummyStringInterface extends DummyInterface<String> {}
Class<?> t = TypeResolver.resolveRawArgument(DummyInterface.class, DummyStringInterface.class);
assert t == String.class;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.