使用kotlin表达式注释

使用kotlin表达式注释,kotlin,annotations,Kotlin,Annotations,Kotlin允许注释表达式。然而,目前尚不清楚这些注释如何有用以及如何使用它们 假设在下面的示例中,我想检查一下,该字符串包含@MyExpr注释中指定的数字。这能实现吗?如何实现 @Target(AnnotationTarget.EXPRESSION) @Retention(AnnotationRetention.SOURCE) annotation class MyExpr(val i: Int) {} fun someFn() { val a = @MyExpr(1) "value

Kotlin允许注释表达式。然而,目前尚不清楚这些注释如何有用以及如何使用它们

假设在下面的示例中,我想检查一下,该字符串包含@MyExpr注释中指定的数字。这能实现吗?如何实现

@Target(AnnotationTarget.EXPRESSION)
@Retention(AnnotationRetention.SOURCE)
annotation class MyExpr(val i: Int) {}

fun someFn() {
    val a = @MyExpr(1) "value#1";
    val b = @MyExpr(2) "value#2";
}
指定
@Target(AnnotationTarget.EXPRESSION)
只是告诉编译器注释用户可以将其放置在何处的一种方式

它不会自己做任何事情,而不是那样做

例如

@Target(AnnotationTarget.EXPRESSION)
@Retention(AnnotationRetention.SOURCE)
annotation class Something


// compiler will fail here:
@Something class Foo {

    // but will succeed here:
    val a = @Something "value#1"
}

除非您正在编写注释处理器(这是一种查找注释并对其进行处理的东西),否则您的注释仅具有信息价值。它们只是向其他开发人员(或未来的您)发出某种信息的信号

@Target(AnnotationTarget.EXPRESSION)
@Retention(AnnotationRetention.SOURCE)
annotation class UglyAndOldCode

val a = @UglyAndOldCode "this is something old and requires refactoring"


如果您想实现您在问题中所述的内容,您必须创建一个注释处理器,用于检查标有
MyExpr
的表达式是否符合您指定的条件。

这只在编译时有用。我认为这可以通过kapt实现。