簡體   English   中英

如何檢查通用接口是否適合 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
        }
    } 

想象一下我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM