我使用的库使用类型使用注释向变量添加约束。例如,如果您想要一个可配置的不透明度(以百分比为单位,由浮点
表示),您需要注释浮点
类型:
public @Setting.Constrain.Range(min = 0, max = 1, step = 0.1) float opacity = 1f;
我不能让同一个库工作在相同的kotlin代码。
为了简化问题,让我们自己声明注释和用法:
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
public @interface JavaAnnot { }
public class TestJava {
@JavaAnnot int a = 5;
public static void main(String[] args) {
System.out.println(TestJava.class.getDeclaredFields()[0].getAnnotatedType().isAnnotationPresent(JavaAnnot.class));
}
}
运行TestJava#main
会产生true
,表明类型上存在JavaAnnot
注释。
如果我们引入一个新的kotlin类TestKotlin
,具有类似的a
字段和注释类型:
class TestKotlin {
val a: @JavaAnnot Int = 5
}
之前的检查,现在在TestKotlin
类上:
TestKotlin.class.getDeclaredField("a").getAnnotatedType().isAnnotationPresent(JavaAnnot.class)
产生false
,指示JavaAnnot注释不存在于Int
类型的a
上,尽管我们显然对其进行了注释。
我尝试过:
@JvmField
注释a
。这并没有改变这种行为
@Target(AnnotationTarget.TYPE)
@Retention(AnnotationRetention.RUNTIME)
annotation class KotlinAnnot
val a: @KotlinAnnot Int = 5
没有解决问题。
这是科特林虫吗?kotlin中是否不存在类型使用注释,或者语法是否不同?我做错了什么?
谢谢
Kotlin字段的AnnotatedType注释与Kotlin元数据注释一起存储,并且只能通过Kotlin反射进行访问。
更新:
从Kotlin 1.4开始。0时,编译器按预期写入类型批注。
主要内容:理解反射的类型(Type)与种类(Kind)在 Go语言中通过调用 reflect.TypeOf 函数,我们可以从一个任何非接口类型的值创建一个 reflect.Type 值。reflect.Type 值表示着此非接口值的类型。通过此值,我们可以得到很多此非接口类型的信息。当然,我们也可以将一个接口值传递给一个 reflect.TypeOf 函数调用,但是此调用将返回一个表示着此接口值的动态类型的 reflect.Type 值。 实际上,r
根据JSR308(Java类型注释),可以使用elementtype.type_use注释任何类型:
我在用匕首2对付科特林。所有工作都很好,但是当我试图将SharedPreferences注入活动时,我的项目甚至不能创建。Gradle控制台说: di\appcomponent.java:6:error:[dagger.android.androidinjector.inject(T)]android.content.sharedpreferences不是nullable,而是由@org.jetb
问题内容: 我需要知道如何在运行时阅读Javadoc注释(可能是通过反射吗?) 说我有以下功能: 在运行时,我可以通过反射获得有关此函数的更多信息。但是无法阅读注释。所以问题是,如何在运行时阅读此 javadoc 注释。 问题答案: 考虑使用注释而不是Javadoc并编写注释处理器。
问题内容: 是否可以获取通用参数的类型? 一个例子: 问题答案: 我曾经偶然发现的一种结构看起来像 因此,似乎有些不可思议的想法使我感到遗憾,我很不了解…对不起。
我知道如果我们知道注释类,我们可以很容易地获得特定的注释并访问其属性。例如: 它将返回特定注释接口的引用,因此您可以轻松访问其值。 我的问题是,我是否对特定的注释类没有预先了解。我只想在运行时使用反射来获取所有注释类名及其属性,以便将类信息转储为例如JSON文件。我怎样才能以简单的方式做到这一点。 此方法将仅返回注释接口的动态代理。