有人可以帮我解决这个问题吗?我的对象有3个主要参数,均为Strings。现在,我想添加一个具有单个emum参数的辅助构造函数,该参数将依次设置3个原始参数,如下所示;
class MyObject(var string1: String, var string2: String, var string3: String)
{
constructor(presetCode: PresetCode ) : this("", "", "")
{
when (presetCode)
{
PresetCode.Code1 ->
{
string1 = "aaa"
string2 = "bbb"
string3 = "ccc"
}
}
}
var anotherObject = AnotherObject(string1)
}
问题是AnotherObject(string1)不起作用,因为string1只是一个空字符串。
如何使用此辅助构造函数设置3个参数,然后成功调用AnotherObject(string1)? 谢谢
答案 0 :(得分:2)
一个选择是用伴随对象上的invoke()
方法替换辅助构造函数:
class MyObject(var string1: String, var string2: String, var string3: String) {
companion object {
operator fun invoke(presetCode: PresetCode) = when (presetCode) {
PresetCode.Code1 -> MyObject("aaa", "bbb", "ccc")
else -> MyObject("", "", "")
}
}
var anotherObject = AnotherObject(string1)
}
在使用中,它看起来像一个构造函数调用,例如:
val o = MyObject(PresetCode.Code1)
此方法简单,简洁且非常灵活。 (例如,它可以返回一个缓存的实例,而不是创建一个新实例。)
答案 1 :(得分:1)
这是我根据您的类设计找到的解决方案,该解决方案需要每个AnotherObject
实例进行一次MyObject
构造:
class MyObject
{
constructor(s1: String, s2: String, s3: String)
{
string1 = s1
string2 = s2
string3 = s3
anotherObject = AnotherObject(string1)
}
constructor(presetCode: PresetCode)
{
when (presetCode)
{
PresetCode.Code1 ->
{
string1 = "aaa"
string2 = "bbb"
string3 = "ccc"
}
else ->
{
string1 = ""
string2 = ""
string3 = ""
}
}
anotherObject = AnotherObject(string1)
}
var string1: String
var string2: String
var string3: String
var anotherObject: AnotherObject
}
希望这会有所帮助。