open class Base(open val input: String) {
lateinit var derived: String
init {
derived = input.toUpperCase() // throws!
}
}
class Sub(override val input: String) : Base(input)
println(Sub("test").derived)
更新:我发布了两个更简洁的代码片段,说明了混乱的根源:
https://gist.github.com/mttkay/9fbb0ddf72f471465afc https://gist.github.com/mttkay/5dc9bde1006b70e1e8ba
原始示例相当于下面的Java程序:
class Base {
private String input;
private String derived;
Base(String input) {
this.input = input;
this.derived = getInput().toUpperCase(); // Initializes derived by calling an overridden method
}
public String getInput() {
return input;
}
}
class Derived extends Base {
private String input;
public Derived(String input) {
super(input); // Calls the superclass constructor, which tries to initialize derived
this.input = input; // Initializes the subclass field
}
@Override
public String getInput() {
return input; // Returns the value of the subclass field
}
}
子类中重写了getInput()方法,因此代码调用Sub.getInput()。此时子类的构造函数尚未执行,因此保存Sub.input值的支持字段仍然为null。这不是科特林的bug;在纯Java代码中很容易遇到同样的问题。
修复方法是不重写该属性。(我已经看到了您的评论,但这并不能真正解释为什么您认为需要重写它。)
问题内容: 我想在Swift中编写一个方法。在这里,我在Objective-C中初始化一个类: 如何在Swift中编写此方法? 问题答案: 我想这可能是您上课的良好基础 我想避免将键复制粘贴到项目中,因此我将可能的键放入这样的示例中: 并且您可以像这样改进您的方法,并且将来您可以避免代码中任何可能的键错误: 注意:那只是如何做的一个原始想法,根本不需要使用便捷的初始化程序,但是对于我对您的最终课程
问题内容: 如果一个月的大写或小写(即不是标题),则DateTimeFormatter无法解析日期。有没有简单的方法可以将日期转换为标题大小写,还是可以使格式化程序更宽松? 版画 问题答案: s是严格的,默认情况下区分大小写。使用和指定以区分大小写。 为了能够解析数字月份(即),您还需要指定。 您也可以更冗长地指定仅月份部分为不区分大小写/宽大: 从理论上讲,这可能会更快,但我不确定是否可以。 P
问题内容: 因此,我尝试尝试计算以下字符串的数百万种不同组合,但我每秒仅计算大约1,750种组合,这甚至还远没有达到我所需的速度。那么,我将如何重塑这种形状,以便同一件事情的多个过程正在计算不同的零件,而不是在计算已经计算出的零件并保持快速的速度呢?下面的代码部分是我一直在使用的代码。任何例子将不胜感激! 问题答案: 将产品分解成一个部分的一种方法是分解产品的第一个组成部分,以便每个独立的作业都具
我如何添加/覆盖max.poll.interval.ms和max.poll.records在我的. yml文件在Spring启动Kafka微服务项目 我试过了,但没用
我正在使用portlet,并在Liferay的wiki上处理示例:https://www.liferay.com/documentation/liferay-portal/6.1/development/-/ai/writing-the-my-greeting-portl-4 我在处理表单后将portlet重定向回init jsp时遇到了一些问题。我的Java类是: 在edit.jsp的表单sub
我面临Elasticsearch结果的问题,该结果在属性名称中使用@。json结果片段: {“\u index”:“logs-2015.12.31”,“\u type”:“log”,“\u id”:“AVH4eA4QKV0mbJuiIHO1”,“\u score”:null,“\u source”:{“@timestamp”:“2015-12-31T14:36:35.378Z”,“beat”:{“