Tag: 注释

kotlin-kapt插件不使用“kapt.generateStubs”

我最近从Android Studio 2.3更新到3.0,kotlin 1.1.4到1.1.51 。 现在我在我的gradle控制台中看到这条消息: kotlin-kapt插件不使用“kapt.generateStubs” 我有这在我的build.gradle让我的项目使用注释处理一些库工作: kapt {generateStubs = true} generateStubs行不再需要,可以安全地删除? 还是有另一个行动,我应该采取消除上述警告消息?

文件类的注释

在我当前的代码(Java)中,我使用类级Java注释进行一些自定义注释处理,即注解是@java.lang.annotation.Target({ElementType.TYPE}) 。 目标类只包含静态工具方法,所以我在Kotlin中使用了文件范围的函数。 如何将这些注释添加到生成的Kt类? 在Java中: // Utils.java package com.example; @MyCustomAspect public void Utils { public static void doStuff() { System.out.println(“Hello”; } } 现在在Kotlin: // Utils.kt package com.example; // ??? @MyCustomAspect ??? fun doStuff() { System.out.println(“Hello”; }

Java Interop:将@JvmName应用于接口或抽象类中的属性的获取者

通常,我们可以在kotlin中编写下面的代码: val hasValue : Boolean @JvmName(“hasValue”) get() = true 这将为Java interop生成方法hasValue()而不是getHasValue() 。 但是,在一个接口,这给了我一个编译错误: val hasValue : Boolean @JvmName(“hasValue”) get 抽象类中的以下声明也是如此: abstract val hasValue : Boolean @JvmName(“hasValue”) get 所以这里是我的问题:如何告诉kotlin编译器使用hasValue()而不是getHasValue()来获取kotlin接口中属性的getter(和setter)?

kotlin:无法获取validationAPI的注释

========== ========== UPDATE 当我将注释更改为@get:NotNull,@get:Min和@get:Max时,hibernate-validator可以读取这些注释成功。 但我仍然想知道的是: 为什么validation-api的注释,比如@NotNull,@Min和@Max不能直接在数据类的成员上使用,而JPA的注释可以是? ==========贝娄是原产地问题=========== 当我尝试在数据类上使用validation-api注解时,Validator类(来自hibernate-validator)无法获得注释,所以validation失败。 我写了一个测试用例,其中包括3个数据类: 第一个使用JPA注释@Column和@Id,可以通过测试用例成功读取。 第二个在成员上使用validation-api注解@NotEmpty,@ Min,@Max,这些注解不能被测试用例读取 第三个使用validation-api注解@get:NotEmpty,@get:Min,@get:Max,测试用例不能读取这些注解。 @Column,@NotNull,@Min和@Max的目标和保留都是:RUNTIME和FIELD 那么,后面发生了什么? 我如何正确使用validation注释? 这里是测试用例: import org.hibernate.validator.constraints.NotEmpty import org.junit.Test import javax.persistence.Column import javax.persistence.Id import javax.validation.constraints.Max import javax.validation.constraints.Min import kotlin.reflect.KFunction import kotlin.reflect.KProperty import kotlin.reflect.jvm.javaField import kotlin.reflect.jvm.javaMethod class KotlinFeatureTest2 { @Test fun test_get_annotation() { // can get field’s annotation for BeanUseJPAAnnotation success println(“Getting field annotations […]

Android Studio StyleRes注释在Kotlin var上发出警告

我有一个公开可见的Int来保存当前的应用程序主题。 var themeId: Int = R.style.AppTheme private set 如果我注释@StyleRes的值 @StyleRes var themeId: Int = R.style.AppTheme private set 我得到一个警告 这个注解不适用于voidtypes; 预计整数或长 如果我将variables更改为val ,则不会显示错误。 我也可以通过添加@JvmField注释来消除这个错误,但是这样做会消除私有设置者的能力。 我是否错误地使用了注释,或者这是Android Studio上Kotlin的问题? 编辑: 吸气剂可以被注释 var themeId: Int = R.style.AppTheme private set @StyleRes get

未解决的参考:KOTLIN需要2个版本清理后,拿起代码时使用kapt

在我们的Android应用程序中,我们使用DBFlow访问SQLite数据库。 我们通过Kotlin引用由DBFlow生成的类。 我们已经意识到这样一个事实,即我们拥有Java中的模型类和数据库类,因为在Kotlin中编写这些类时代码生成将不起作用 。 不过,在每个项目清理完毕后,我们仍然需要两次构建代码。 在设备上执行第一个构建会导致看似随机的Kotlin类的ClassNotFoundExceptions (即使它们不访问由DBFlow或我们定义的任何模型类生成的代码)。 编译时已经报告过,当启用Proguard时,这当然不能构建。 第二个构建总是成功的。 有趣的是,代码生成已经在第一次运行 – 类在那里,也被IDE拿起。 但编译器以某种方式无法find它们,使我认为代码生成在构建过程中发生得太迟。 另一方面,如上所述,还有一些没有发现的代码生成和/或注释处理不需要做任何事情的类。 那么是否有比第二个版本更好的解决方案? 作为参考,我们的应用程序的build.gradle的相关部分看起来像这样 – 就像DBFlow文档建议: def dbflow_version = “3.0.0-beta4” dependencies { kapt “com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}” compile “com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}” compile “com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}” } kapt { generateStubs = true } 编辑:我发现,我也必须重建两次,我对代码的每一个变化。 它在第一个版本中编译正确,如果我以前没有清除,但是这些更改根本没有被拾取。

Android,Gradle,Realm,Kotlin:错误:错误:找不到AndroidManifest.xml文件

Android Studio 2.3.3,Java 8,Kotlin 1.1.3-2 项目的build.gradle: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = ‘1.1.3-2’ repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:2.3.3’ classpath ‘com.google.gms:google-services:2.0.0-alpha6’ classpath “io.realm:realm-gradle-plugin:3.5.0” classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” // NOTE: Do not place your application dependencies here; they belong // in the individual module […]

如何解释kotlin的@Metadata注释内容?

我知道kotlin为每个编译的类生成@Metadata注释。 我也看到了这种types的评论: 此批注存在于Kotlin编译器生成的任何类文件中,并由编译器和reflection读取。 问题是编译器如何使用它(假设它是编译的结果)? 我会请求解释注释的内容。 例如,这一个: @Metadata( mv = {1, 1, 9}, bv = {1, 0, 2}, k = 1, d1 = {“\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0003\u0018\u0000 \u00032\u00020\u0001:\u0001\u0003B\u0005¢\u0006\u0002\u0010\u0002¨\u0006\u0004”}, d2 = {“LMain;”, “”, “()V”, “Companion”, “production sources for module kotlin-examples”} ) 提前致谢!

Kotlin中的注释处理器:可为空的types

我正在Kotlin写我的第一个注释处理器。 我需要检查一个注释的属性的types,以知道是否可选。 客户端代码如下所示: @MyAnnotation var property: String? 在我的注释处理器中,我有一个来自javax.lang.model.element packpage的Element类实例,它代表了我注释的属性。 我可以做element.asType()来获取types的属性,但我不知道如何检查这个属性是否可选。

如何在Kotlin中使用Ebean的@DbEnumValue?

背景 我试图把这个从Java的Ebean例子转换成Kotlin: http ://ebean-orm.github.io/docs/mapping/extension/dbenumvalue 以下是示例Java代码: public enum Status { NEW(“N”), ACTIVE(“A”), INACTIVE(“I”); String dbValue; Status(String dbValue) { this.dbValue = dbValue; } // annotate a method that returns the value // in the DB that the enum element maps to @DbEnumValue public String getValue() { return dbValue; } } 科特林 我期待Kotlin的下列内容: // ERROR: This annotation is […]