美文网首页
关于注解和泛型的补充

关于注解和泛型的补充

作者: 菜神一把梭 | 来源:发表于2019-11-27 10:06 被阅读0次

    1:获取自定义注解中的clazz属性
    Class<VM> clazz = (Class<VM>) this.getClass().getAnnotation(Param.class).clazz();
    mViewModel = ViewModelProviders.of(this).get(clazz);
    getLifecycle().addObserver(mViewModel);
    1.1自定义注解
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Param {
    int id() default -1;
    Class<? extends BaseViewModel> clazz() default BaseViewModel.class;
    int variableId() default 0;
    }

    2:在父类中获取子类实例化的具体泛型参数。
    两个类:A带泛型参数T,B继承A并给出泛型参数类型,现在想在A中获取T的Class类型。
    public abstract class A<T> {
    public A() {
    Type genericSuperclass = this.getClass().getGenericSuperclass();
    ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
    Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
    Class tClass = (Class) actualTypeArguments[0];
    System.out.println(tClass.getName());
    // 用一句话获取就是下面一行代码,只是去除了中间变量,可读性差了些
    // Class tCls = (Class) (((ParameterizedType) (this.getClass().getGenericSuperclass())).getActualTypeArguments()[0]);
    }
    }

    public class B extends A<String> {
    }

    执行一下代码:
    public static void main(String[] args){
    new B();//控制台会输出java.lang.String
    }

    相关文章

      网友评论

          本文标题:关于注解和泛型的补充

          本文链接:https://www.haomeiwen.com/subject/chouwctx.html