首页 > 解决方案 > 在 Kotlin 中使用 setter 实现 Java getter 接口

问题描述

我有一个java接口:

    public interface TestInterface {
           String getName();
    }

我有一个科特林课程:

class TestImpl(private var name: String = "name"): TestInterface {
    override fun getName(): String = name
}

但是如果我也想要name字段的setter方法,

class TestImpl(private var name: String = "name"): TestInterface {
    override fun getName(): String = name
    // I don't want to write a setter like this
    fun setName(n: String) {
        this.name = n
    }
}

我能做些什么更好的方法?谢谢。

标签: javakotlin

解决方案


你可以使用

class TestImpl(@get:JvmName("getName_") var name: String = "name"): TestInterface {
    override fun getName(): String = name
}

然后,您可以x.name/x.name = ...从 Kotlin 和x.getName()/x.setName(...)从 Java 访问它。不幸的是,您getName_()在 Java 中也有,但您不必使用它。


推荐阅读