当前位置: 首页 > 知识库问答 >
问题:

使用kotlin表达式注释

东门令
2023-03-14

静态编程语言允许注释表达式。然而,尚不清楚这些注释如何有用以及如何使用它们。

假设在下面的示例中,我想检查一下,该字符串包含@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";
}

共有1个答案

董洲
2023-03-14

指定@Target(AnnotationTarget.表达式)只是告诉编译器注释的用户可以把它放在哪里的一种方式。

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

例如。

@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的表达式是否符合指定的条件。

 类似资料:
  • 我最近一直在研究静态编程语言lang及其与java的互操作。我有以下java代码: 其中编写如下: Java编译器说常数1和常数2必须是常数,但我不知道如何使它们比现在更恒定。所以我的问题是:如何在java swicth语句中使用kotlin中的常量? 我用的是jdk8和kotlin M14。

  • 主要内容:对象表达式,对象声明,伴生对象,对象表达式和对象声明之间的语义差异Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类。 对象表达式 通过对象表达式实现一个匿名内部类的对象用于方法的参数中: 对象可以继承于某个基类,或者实现其他接口: 如果超类型有一个构造函数,则必须传递参数给它。多个超类型和接口可以用逗号分隔。 通过对象表达式可以越过类的定义直接得到一个对象: 请注意,匿名对象可以用作只在本地和私有作用域

  • 问题内容: 我需要使用批注+正则表达式对电子邮件进行验证。我尝试使用以下内容: 但是,当电子邮件字段中的电子邮件地址不正确时,我不知道如何打印错误消息。有任何想法吗? 问题答案: 首先,您应该在注释中添加一个属性。假设您的邮件变量是某个类User的一部分: 然后,您应该定义一个验证器: 然后找到验证错误。

  • 如何计算方面中的Spring Security表达式?我想我可以很容易地使用完成这项工作的类I spring框架

  • 问题内容: 我正在将Java中的项目转换为Kotlin,而令我惊讶的是,该接口使Kotlin中的代码比Java中的代码重。 示例 :我想从MyFragment在MainActivity中设置onBackPressListener。 文件1:MainActivity,文件2:MyFragment,文件3:OnBackPressedListener(接口) Java中的文件1,Kotlin中的文件2,

  • 行动时刻 - 使用正则表达式 Unlang允许在条件检查中进行正则表达式计算。这些通常是Posix正则表达式。运算符=〜和!〜与正则表达式相关联。为了简单的概念证明,我们将修改上一个练习: 1.编辑FreeRADIUS配置目录下的sites-available / default虚拟服务器,并在该部分顶部的post-auth部分中添加以下内容: if(request:Framed-Protocol