当前位置: 首页 > 知识库问答 >
问题:

Kotlin重写Java setter[重复]

蒲勇
2023-03-14
void setInputStream(InputStream in);
class ProxyCommand : Command {
    lateinit var _inputStream: ChannelPipedInputStream

    var inputStream: InputStream
        get() = this._inputStream
        set(value) { // This should override it.
            this._inputStream = (value as ChannelPipedInputStream)
        }
}
Accidental override: The following declarations have the same JVM signature (setInputStream(Ljava/io/InputStream;)V): 
public final fun <set-inputStream>(value: InputStream): Unit defined in ...
public abstract fun setInputStream(`in`: InputStream!): Unit defined in ...

上面说这是一次意外的超驰,但这不是偶然的...

我想要的可能吗?还是必须重写SetInputStream方法。我更喜欢kotlin setter..

共有1个答案

伊锦
2023-03-14

还是必须重写setInputStream方法。我更喜欢kotlin setter..

TLDR:是的

属性设置器无法重写超类型命令的函数。作为解决办法,将您的属性private设置为private并实现所需的接口方法,例如:

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

    private lateinit var inputStream: ChannelPipedInputStream
}
 类似资料:
  • 我在Java中有一个模型类,我把它转换成了kotlin中的数据类 正如您所看到的,我希望在检索变量时更改它的值。 当服务器试图检索时,它返回null,而它应该返回新值。对象具有值,但'videoassets.gethls()'始终为null。 有人能指出我缺少什么吗?

  • 我正在尝试将LocalDateTime字段保存为long,以便将其存储在SQLite数据库中。我怎么能做到这一点?

  • 也许我对概念感到困惑,但是重写和在子类中创建一个新方法之间有什么区别呢?重写不就是在子类中创建一个不同于父类的新的特定方法吗?但这难道不是在子类中创建一个新方法所要做的吗?

  • 以下声明在科特林是合法的。 作为字节码,我们得到: 也可以从Kotlin调用这两个方法。 当我试图从Java调用它们中的任何一个时,问题就出现了: 模棱两可的调用。两种方法都匹配… 如何避免这样的问题?如何处理这些方法?若第三方kt库也有同样的问题怎么办? 上面的例子是一个合成的例子。

  • 问题内容: 在AppConfig类的代码中,我们可以看到: 好吧,这是我的例子: my_app / apps.py 我只想使现成的方法起作用。也就是说,当Django找到my_app时,让它运行ready方法。 该应用已在INSTALLED_APPS中注册。 我执行’python manage.py runserver’。并没有打印任何内容。 如果我在ready方法中放置一个断点,则调试器不会在那

  • "The great thing about mod_rewrite is it gives you all the configurability and flexibility of Sendmail. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Send