我有以下方法,这些方法根据调用它们的位置返回对象的特定值。
fun getRoamingStatusErrorItem(): SettingItem {
return SettingRoamingItem(
isRoaming = false,
processingText = "",
isEnabled = false,
isErrorVisible = true,
isProgressVisible = false)
}
fun getRoamingStatusProgressItem(): SettingItem {
return SettingRoamingItem(
isRoaming = false,
processingText = "",
isEnabled = false,
isErrorVisible = false,
isProgressVisible = true)
}
fun getRoamingStatusProcessingItem(text: String): SettingItem {
return SettingRoamingItem(
isRoaming = false,
processingText = text,
isEnabled = false,
isErrorVisible = false,
isProgressVisible = false)
}
如您所见,这些方法仅表示对象类型的不同状态。我想了解这是否是使用这种方式的良好编码习惯,还是可以更好地重构它
答案 0 :(得分:2)
如果SettingRoamingItem
受您控制,则可以为其提供一些默认值,例如:
class SettingRoamingItem(
val isRoaming : Boolean = false,
val processingText : String = "",
val isEnabled : Boolean = false,
val isErrorVisible : Boolean = false,
val isProgressVisible : Boolean = false)
那么您的函数调用可以简化为:
fun getRoamingStatusErrorItem() = SettingRoamingItem(isErrorVisible = true)
fun getRoamingStatusProgressItem() = SettingRoamingItem(isProgressVisible = true)
fun getRoamingStatusProcessingItem(text : String) = SettingRoamingItem(processingText = text)
但是然后:为什么您还要使用这些功能?
答案 1 :(得分:1)
在不改变整个班级的情况下,您无能为力。唯一“简单”的事情是添加另一个没有isRoaming
参数的构造函数:在所有三个示例中,该值为false
。当您始终传递相同的值时:不要传递该值,而应使用构造函数伸缩将该值提供为“默认”。
除此之外,如果您愿意花费更多的时间,则应在此处使用builder模式。喜欢:
SettingRoamingItemBuilder().withText("").withProgressVisible(true)..
.build()
关键是要为所有这些最常见的参数标识这些值,并将其用作默认值,以便只有那些偏离默认值的地方才需要调用以相应地更改默认设置。 / p>
答案 2 :(得分:1)
您可以为SettingRoamingItem
使用构建器模式,并为默认值使用isRoaming = false, processingText = "", isEnabled = false, isErrorVisible = true, isProgressVisible = false
。然后使用.withProcessingText(“ text”)。enableVisibleError()。build()之类的东西来获取您的吸气剂所需的实例。
答案 3 :(得分:1)
您可以使用默认值重写您的构造函数:
class SettingRoamingItem(
var isRoaming: Boolean = false,
var processingText :String = "",
var isEnabled: Boolean = false,
var isErrorVisible: Boolean = true,
var isProgressVisible: Boolean = false)
fun getRoamingStatusErrorItem(): SettingItem = SettingRoamingItem(isErrorVisible = true, isProgressVisible = false)
fun getRoamingStatusProgressItem(): SettingItem = SettingRoamingItem(isErrorVisible = false, isProgressVisible = true)
fun getRoamingStatusProcessingItem(text: String): SettingItem = SettingRoamingItem(processingText = text,
isErrorVisible = false,
isProgressVisible = false)