Kotlin重写Java setter

Kotlin重写Java setter,java,oop,inheritance,kotlin,Java,Oop,Inheritance,Kotlin,我正在使用以下方法实现java接口(命令): void setInputStream(InputStream in); 我想用Kotlin setter覆盖此设置: class ProxyCommand : Command { lateinit var _inputStream: ChannelPipedInputStream var inputStream: InputStream get() = this._inputStream set(

我正在使用以下方法实现java接口(命令):

void setInputStream(InputStream in);
我想用Kotlin setter覆盖此设置:

class ProxyCommand : Command {
    lateinit var _inputStream: ChannelPipedInputStream

    var inputStream: InputStream
        get() = this._inputStream
        set(value) { // This should override it.
            this._inputStream = (value as ChannelPipedInputStream)
        }
}
但我在
设置(值)
时遇到此错误:

意外重写:以下声明具有相同的JVM签名(setInputStream(Ljava/io/InputStream;)V):
公共最终乐趣(值:InputStream):定义在。。。
公共抽象fun setInputStream(`in`:InputStream!):在中定义的单元。。。
它说这是一个意外的覆盖,但它不是偶然的

我想要的可能吗?或者我只需要重写
setInputStream
方法。我更喜欢科特林塞特

或者我必须重写setInputStream方法。我更喜欢科特林塞特

tldr:是的

属性设置程序不可能重写超类型
命令的函数。作为一种解决方法,将您的属性设置为私有属性,并实施所需的接口方法,另外还包括以下方法,例如:

class ProxyCommand : Command {
    override fun setInputStream(`in`: InputStream) {
        TODO("not implemented")
    }

    private lateinit var inputStream: ChannelPipedInputStream
}

我的猜测是因为Java版本是只读的,它不能表示为Kotlin属性,可以是只读的,也可以是读写的。@MarkoTopolnik是的,只有一个setter。
class ProxyCommand : Command {
    override fun setInputStream(`in`: InputStream) {
        TODO("not implemented")
    }

    private lateinit var inputStream: ChannelPipedInputStream
}