
// Java 注解定义 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.CLASS) public @interface AnnoTest { Class<?> model() default Void.clas; } data class model2(val name: String = "") @AnnoTest(model = model2::class) class Person 想问下为什么这里的 model 传参是model2::class 而不是model2::class.java
1 AoEiuV020CN 2022-01-05 09:58:22 +08:00 在我看来就是单纯因为后者太难看而这么特殊规定的, 毕竟注解处理是在编译时,看起来是方法传参但并不是在运行时传递对象,没必要强行区分 kotlin class 和 java class, |
2 syncdev OP @AoEiuV020CN 了解了,感谢 |
3 gam2046 2022-01-05 10:38:06 +08:00 一个类型是 KClass ,另一个类型是 Class |
4 syncdev OP @gam2046 model2::class 应该是 KClass ,但是注解里定义的是 Class ,按理不是传递的时候应该用 model2::class.java 吗 |
5 rhacker1995 2022-01-05 12:02:21 +08:00 kclass 兼容 JAVA class ,反之不然 |
6 syncdev OP @rhacker1995 但是为啥这里如果传 model2::class.java 编译不通过? |
7 rhacker1995 2022-01-05 13:52:12 +08:00 了解一下 JAVA 转换规则 父类引用能指向子类对象 |