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

将注释传递给静态编程语言中的函数

壤驷深
2023-03-14

如何将注释实例传递给函数?

我想调用java方法AbstractCDI.select(类

调用构造函数,如cdiInstance。不允许使用select(MyClass::javaClass,MyAnnotation()),并且@Annotation语法cdiInstance。select(MyClass::javaClass,@MyAnnotation)也不允许作为参数。如何存档?


共有2个答案

左丘季
2023-03-14
匿名用户

可以使用注释注释方法或字段,并按每个反射获取:

< code > this . Java class . get method(" annotated method ")。get annotation(my annotation::class . Java)

或者根据罗兰的建议,上述科特林版本:

我的分类::注释方法查找注释

正如罗兰为CDI建议的那样,最好使用注释文字(见他的帖子)。

裴良弼
2023-03-14

使用CDI时,您通常还可以使用AnnotationLitald,或者至少您可以相当容易地实现类似的东西。

如果您想使用您的注释选择一个类,下面的方法应该可以做到:

cdiInstance.select(MyClass::class.java, object : AnnotationLiteral<MyAnnotation>() {})

或者,如果您需要一个特定的值,您可能需要实现您特定的AnnotationLitald-class。在Java,它的工作原理如下:

class MyAnnotationLiteral extends AnnotationLiteral<MyAnnotation> implements MyAnnotation {
    private String value;

    public MyAnnotationLiteral(String value) {
        this.value = value;
    }
    @Override
    public String[] value() {
        return new String[] { value };
    }
 }

然而,在 Kotlin 中,您无法实现注释并扩展注释文字,或者也许我只是不知道如何实现(另请参阅相关问题:在 Kotlin 中实现(/继承/~扩展)注释)。

如果您更愿意继续使用反射来访问注释,那么您可能更愿意使用Kotlin反射方式:

ClassWithAnno::class.annotations
ClassWithAnno::methodWithAnno.annotations

调用filter等以获取所需的注释Annotation,或者如果您知道那里只有一个 是KAnnotatedElement上的扩展函数):

ClassWithAnno::class.findAnnotation<MyAnnotation>()
ClassWithAnno::methodWithAnno.findAnnotation<MyAnnotation>()
 类似资料:
  • 我试图将@Age constraint的实现从java复制到Kotlin,我复制了Java代码库,并使用IDE将其转换为Kotlin代码。 Java代码 Intellij生成的对应静态编程语言代码 Kotlin代码导致错误声明“注释类中不允许成员”。将注释类List从Age中移出是否可以解决此问题?还有其他方法可以在另一个类中实现注释类吗? 非常感谢。

  • 根据这个问题,一个函数可以作为参数传递给另一个函数,如下所示 类似地,我们也可以从类中传递方法 但是如果我们要传递的方法是静态的(在伴随对象中)呢? 我知道,由于它是静态的,我们可以直接调用该方法,而不必将其作为参数传递,然而,在某些情况下(例如利用现有代码时),这仍然是有用的。

  • 我有以下问题:-创建了几个模块来实现类,并用-我的Android应用程序正在使用检索这些类。但是由于某种原因,没有在

  • 下面是Groovy的一个示例,它正好代表了我想要实现的目标: 命令行: 这个例子的来源在这里-选项3。 如何读取Kotlin DSL中的pass和值?

  • 如何为方法/类生成注释?只需输入: 推入似乎在IntelliJ IDEA 2016.1.3中不起作用 看起来Dokka已经取代了KDoc,但为什么IntelliJ中没有支持?还是我错过了什么? 澄清:当输入/**enter时,会生成: 但是我想知道为什么没有添加@参数和其他的生成(就像IntelliJ为Java所做的那样)。这些注释也用于记录静态编程语言代码(https://kotlinlang.

  • 我在Kotlin中有以下功能 我想以某种方式更改它,以便我可以作为第三个参数传递所需的运算符并评估表达式。类似的东西 在这种情况下,如何将运算符作为函数传递?我检查了同样的问题,但不清楚如何使用操作员。