我正在尝试在重载的构造函数中添加一些处理逻辑,但似乎无法使其正常工作。
这是我想要做的一个简化示例:
class FooBar(val x: String, val y: String) {
this(z: String) = {
// DO SOME ARBITRARY CODE
val x = // SOME ARBITRARY PROCESSING USING z
val y = // SOME ARBITRARY PROCESSING USING z
this(x, y)
}
}
但是,我收到编译错误:
: 'this' expected but 'val' found
这是 Java 中的一项非常简单的任务,我只需x, y
从 2 个单独的构造函数中设置实例变量。
这是我想要完成的Java等价物:
class FooBar {
public String x;
public String y;
public FooBar(String x, String y) {
this.x = x;
this.y = y;
}
public FooBar(String z) {
// DO SOME ARBITRARY CODE
this.x = // SOME ARBITRARY PROCESSING USING z
this.y = // SOME ARBITRARY PROCESSING USING z
}
}
=================== 编辑==================
我决定使用伴随对象的@om-nom-nom 方法。然而,正如@om-nom-nom 指出的那样,没有办法绕过丢失的new
调用。因此,为了使我的构造函数保持一致,我apply
在伴生对象中重载了该方法:
class FooBar(val x: String, val y: String)
object FooBar {
def apply(x: String, y: String) = new FooBar(x, y)
def apply(z: String) = {
// DO SOME ARBITRARY CODE
val x = // SOME ARBITRARY PROCESSING USING z
val y = // SOME ARBITRARY PROCESSING USING z
new FooBar(x, y)
}
}
FooBar(someX, someY)
FooBar(someZ)