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

如何从Java中获取Kotlin属性的注释?

穆飞龙
2023-03-14

我有一个kotlin类,它的属性有一个Java的注释,但是我不能用Java反射访问这些注释:

class TestClass(@A var myProperty : String)

以下测试打印为空:

public class TestKotlinField {

    @Retention(RetentionPolicy.RUNTIME)
    public @interface A{}

    @Test
    public void test() throws NoSuchFieldException {
        System.out.println(TestClass.class.getDeclaredField("myProperty").getAnnotation(A.class));
    }
}

如何获取给定kotlin属性的注释?

共有2个答案

柴衡
2023-03-14

摘自Kotlin参考资料:

在注释属性或主构造函数参数时,有多个 Java 元素是从相应的 Kotlin 元素生成的,因此在生成的 Java 字节码中,注释有多个可能的位置。

在这种情况下,您需要注释字段,因此您的属性声明应该如下所示:

@field:A

您的构造函数看起来会像这样:

TestClass(@field:A myProperty : String) 
袁鸿畅
2023-03-14

正如在另一个回答中提到的,您可能希望注释字段而不是属性。但是,如果您真的需要对属性进行注释,您可以通过Kotlin反射找到注释:

Field field = TestClass.class.getDeclaredField("field");
KProperty<?> property = ReflectJvmMapping.getKotlinProperty(f);
System.out.println(property.getAnnotations());
 类似资料:
  • 问题内容: 我正在Python中使用Selenium。我想获取一个元素的,并检查它是否是我所期望的。 这是我的代码: 我怎样才能做到这一点?Selenium文档似乎有很多关于选择元素的内容,但是与属性无关。 问题答案: 您可能正在寻找。一个例子示此处以及

  • 问题内容: 我有几个线程组。我想使用第一组的变量。在第二组中,此var应该在BeanShell中使用。所以:在第一个线程组中,我使用以下代码创建了BeanShell断言: 在第二个线程组中,我有BeanShell预处理器。如果有这样的行: 我尝试过这样的一些变化: 但这不起作用。请帮助在BeanShell预处理器中使用$ {__ property(erroriden)}。 问题答案: 在第一个线程

  • 我正在使用Python中的Selenium。我想获取

  • 如果我有: 我可以通过使用getBean方法之一获得bean和资源。然而,我不知道如何获取属性值。 显然,我可以创建一个具有@Value属性的新bean,如: 我在Application Context对象上调用什么方法来获得该值而无需自动装配bean? 我通常使用@Value,但有一种情况是SPeL表达式需要是动态的,所以我不能只使用注释。

  • 我正在尝试从我的OpenStreetMap boundaries postgis服务器中获取真实的geo JSON[For you:< code > psql-t-h { base64(MTG 1 ljixos 4x mziumje 5)}-U boundaries-d boundaries ] 构建JSON工程: 从 al4 中选择 jsonb_build_object( 'type', 'Fe

  • 问题内容: 我正在尝试从“ a href”属性获取链接 我在做什么: 我正在获取具有“ dl_link 1”类的元素,但无法获取它的链接,字符串为空? 问题答案: 您需要使用实际的属性名称进行调用。更换: 与: