Tag: kotlin interop

平台声明冲突与可比

我从Comparable接口的多个默认实现(下面演示)中得到编译器的Platform Declaration Clash错误。 interface ClassA: Comparable<ClassA> { val x: Int get override fun compareTo(other: ClassA): Int = this.x.compareTo(other.x) } interface ClassB: Comparable<ClassB> { val y: String get override fun compareTo(other: ClassB): = this.y.compareTo(other.t) } data class ClassAB(val x: Int, val y: String): ClassA, ClassB { … } 我明白为什么我得到这个错误; compareTo两个默认实现都映射到Java中的compareTo(Object) 。 因此,Kotlin在孩子身上不知道使用哪一个。 有没有一种机制,可以让我选择一个使用,或者,更好的是,让我重写compareTo(Object) ? 我试过定义compareTo(Any) ,但是这是不对的。 […]

Kotlin未解决的参考:来自gradle上的println

在kotlin函数之前放置println语句将返回崩溃。 堆栈跟踪: thufir@dur:~/NetBeansProjects/kotlin$ thufir@dur:~/NetBeansProjects/kotlin$ gradle clean build –stacktrace w: Classpath entry points to a non-existent location: e: /home/thufir/NetBeansProjects/kotlin/src/main/kotlin/example.kt: (14, 5): Unresolved reference: println > Task :compileKotlin Using Kotlin incremental compilation FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileKotlin'. > Compilation error. See log for more details * Try: […]

在表达式中不允许赋值?

在Java中,我们通常可以在while条件内执行一个赋值。 但是Kotlin抱怨。 所以下面的代码不能编译: val br = BufferedReader(InputStreamReader( conn.inputStream)) var output: String println("Output from Server …. \n") while ((output = br.readLine()) != null) { // <— error here: Assignments are not expressions, and only expressions are allowed in this context println(output) } 根据这个其他的线程 ,这似乎是最好的解决方案: val reader = BufferedReader(reader) var line: String? = null; while ({ line […]

在Kotlin的Runnable SAM中不能有返回?

我对这段代码有以下错误,这对我没有任何意义: fun spawnWorker(): Runnable { return Runnable { LOG.info("I am a potato!") return } } 我的IDE对我说: 但Runnable接口说:否则: @FunctionalInterface public interface Runnable { public abstract void run(); } 为什么我不能在那里得到回报,但没有任何回报,它编译得很好: fun spawnWorker(): Runnable { return Runnable { LOG.info("I am a potato!") } }

Kotlin匕首2 Android ViewModel注入错误

我试图在我的Android应用程序上使用匕首2从arch android库注入新的ViewModel。 从我看到的这个示例https://github.com/googlesamples/android-architecture-components/tree/e33782ba54ebe87f7e21e03542230695bc893818/GithubBrowserSample我需要使用这个: @MustBeDocumented @Target(AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) @Retention(AnnotationRetention.RUNTIME) @MapKey internal annotation class ViewModelKey(val value: KClass<out ViewModel>) @Module abstract class ViewModelModule { @Binds @IntoMap @ViewModelKey(LoginViewModel::class) internal abstract fun bindLoginViewModel(viewModel: LoginViewModel): LoginViewModel @Binds @IntoMap @ViewModelKey(MainMenuViewModel::class) internal abstract fun bindSearchViewModel(viewModel: MainMenuViewModel): MainMenuViewModel @Binds internal abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory } @ApplicationScope @Component(modules = arrayOf(ApplicationModule::class, NetworkModule::class, ViewModelModule::class)) interface […]

如何使Kotlin中的数据类不可变与日期对象的Java?

java.util.Date本身是一个可变对象。 因此,即使Kotlin数据类(日期字段声明为val)阻止我更改引用,我可以修改日期对象本身以更改其值。 我可以想出的方法: 使用普通类,重写getter和setter。 在每个使用克隆方法来复制给定的日期。 @Column(name = "db_date") private var dbDate: Date? = null get() = dbDate?.clone() as Date set(date) { field = date?.clone() as Date } 此外,我不能使用数据类的copy方法,因为这些类是休眠实体。 所以我需要通过setter修改它们。 我想为我的实体使用数据类的原因是因为这些默认实现equals和hashcode 。 我们一直在使用Java的龙目岛这个,现在令人信服的团队创造这些方法是艰难的。 即使通过IDE发生,它仍然会被检查到源代码管理。 那么有什么办法可以做数据类逻辑的自定义设置器。 或者任何我可以生成等于和正常类的哈希码,而无需在源代码管理中检查它们? 编辑:在注释中指出使用java.time.Instant是不可变的。 我面临的问题是这是一个Hibernate实体类 ,我们正在使用休眠3.6 。 即时支持来到休眠5.2,所以我们是后面的方式,迁移休眠将是一个沉重的任务。 我注意到的是,kotlin数据类允许setter和getter只是以不同的方式。 代码如下: @Entity @Table(name = "my_table") data class MyTable( @Id @Column(name = "id") var id: […]

如何在基本类型中使用kotlin中的@Autowired或@Value等Spring注解?

使用类似Spring的注释自动装配非基元 @Autowired lateinit var metaDataService: MetaDataService 作品。 但是这不起作用: @Value("\${cacheTimeSeconds}") lateinit var cacheTimeSeconds: Int 有一个错误: 基元类型不允许使用lateinit修饰符。 如何autotire primitve属性到kotlin类?

Kotlin中的数据类

有什么区别: 定义1 data class Person (var name:String, var age:Int) 定义2 class Person (var name:String, var age:Int) 定义3 class Person (){ var name:String = "" var age:Int = 1 } 在3种情况下,当我使用自动完成,我看到了像POJO一样的方法…是相同的,但3种不同的方式?

在Kotlin项目中使用的传统Java库中保持零安全

假设我在旧/旧Java库中有特定的代码: public class JavaClass { private String notNullString; private String nullableString; private String unannotatedString; public JavaClass(@NotNull String notNullString, @Nullable String nullableString, String unannotatedString) { this.notNullString = notNullString; this.nullableString = nullableString; this.unannotatedString = unannotatedString; } @NotNull public String getNotNullString() { return notNullString; } @Nullable public String getNullableString() { return nullableString; } public String getUnannotatedString() { return […]

我如何在Kotlin中声明一个可以是字符串或函数的函数参数?

在下面的函数中,我想传递一个html标签的属性。 这些属性可以是字符串( test("id", "123") )或函数( test("onclick", {_ -> window.alert("Hi!")}) ): fun test(attr:String, value:dynamic):Unit {…} 我尝试将参数value声明为Any ,Kotlin中的根类型。 但函数不是Any类型的。 声明类型为dynamic工作,但是 dynamic不是一种类型。 它只是关闭输入检查参数。 dynamic只适用于kotlin-js(Javascript)。 我如何在Kotlin(Java)中编写这个函数? 函数类型与Any有什么关系? 是否有包含函数类型和Any类型?