如何检查通用接口是否适合 class

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
        }
    } 

想象一下我在 ArrayList 中存储 DummyClass 和不同泛型的情况。当我从列表中得到 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;