generics - 有限制的通配符类型的kotlin等效于Java注释字段是什么?

标签 generics annotations kotlin

假设我在Java中有这样的注释:

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

public interface Bar {}

我应该如何将Foo转换成kotlin?在这种情况下我只能切换回Java是真的吗?

最佳答案

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")
}

注意KClass类型参数上的 out 修饰符。它使类型参数协变,这意味着它可以是Bar类型或任何实现Bar的类型。

关于generics - 有限制的通配符类型的kotlin等效于Java注释字段是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41824912/

相关文章:

java - 是否可以实现一个带有 <Generic extends X> 类型参数的类?

c# - 将简单对象转换为简单通用的接口(interface)

java - Spring中注解和xml一定要一起使用吗?

java - Android Studio 无法启动 Activity ComponentInfo

c# - 在 C# 中返回给定接口(interface)的泛型类型

java - Java 中的泛型(和通配符)

Java 注解反射排序

python - Python函数指针的类型

enums - 如何在 Kotlin 中声明枚举类型的变量?

android - DocumentSnapshot (Firestore) 到包含自定义对象列表的 Kotlin 对象