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

关于注解和泛型的补充

作者: 菜神一把梭 | 来源:发表于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