Generics 什么是kotlin等价于Java注释字段的有界通配符类型?

Generics 什么是kotlin等价于Java注释字段的有界通配符类型?,generics,annotations,kotlin,Generics,Annotations,Kotlin,假设我有一个Java注释,如下所示: public @interface Foo { Class<? extends Bar> value(); } public interface Bar {} public@interface-Foo{ 类Kotlin注释不能有方法定义。但是,它们可以有构造函数参数。我认为这就像您希望的那样: import kotlin.reflect.KClass interface Bar class Foo : Bar @Target(An

假设我有一个Java注释,如下所示:

public @interface Foo {
    Class<? extends Bar> value();
}

public interface Bar {}
public@interface-Foo{

类Kotlin注释不能有方法定义。但是,它们可以有构造函数参数。我认为这就像您希望的那样:

import kotlin.reflect.KClass

interface Bar
class Foo : Bar

@Target(AnnotationTarget.FUNCTION)
annotation class Test(val value: KClass<out Bar>)

@Test(Foo::class)
fun testAnnotation() {
    println("Test")
}
import kotlin.reflect.KClass
接口条
班:酒吧
@目标(AnnotationTarget.FUNCTION)
注释类测试(val值:KClass)
@测试(Foo::类)
趣味测试说明(){
println(“测试”)
}

请注意
KClass
类型参数上的out修饰符。它使类型参数协变,这意味着它可以是
Bar
类型,也可以是实现
Bar
的任何类型。我想您可以给类型参数一个名称:
fun value():Class
@marstran请注意,这是一个注释,kotlin注释甚至不能有一个类主体。实际上,我把scala和它混淆了,我尝试了用加号(
+
)对类型进行后缀和前缀,当然,它会产生一些奇怪的兼容错误。