Kotlin重写Java setter
我正在使用以下方法实现java接口(命令):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(
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
}