// Java 注解定义
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface AnnoTest {
Class<?> model() default Void.class;
}
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 转换规则 父类引用能指向子类对象
|