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/

相关文章:

vb.net - .NET 4 中是否允许泛型运算符重载?

java - 如何在我的界面中为最终变量创建 Java 字段注释

java - Kotlin 将注释作为参数传递给注释

java.sql.SQLException : Data truncated for column 'gender' at row 1 for enum

kotlin - 如何在 kotlin 中分割 unicode 空白

java - 在类中传递通用对象类型

java - 如何将一个接口(interface)上的实现者转换为另一个接口(interface)?

java - 使用 Class 对象实例化 Java 类型参数/泛型

java - 为 kotlin 尝试 monad

kotlin - 确保在 Kotlin 中初始化 val