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

如何改进三种工作略有不同的方法

麹浩瀚
2023-03-14

我有以下方法,它们根据调用对象的位置返回对象的特定值。

 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)
    }

正如您所看到的,这些方法只是表示对象类型的不同状态;我想了解这是否是一种很好的编码实践来使用它,或者我可以以更好的方式重构它

共有3个答案

穆修杰
2023-03-14

您可以为SettinRoamingItem使用Builder模式,并为默认值设置isRoaming=false、Process ingText = "", isEnable=false、isErrorViable=true、isProgressViable=false。然后使用类似. with ProcessingText("text"). enableVisibleError(). build()的内容来获取getter所需的实例。

吕征
2023-03-14

在不改变整个班级的情况下,你能做的事情不多。唯一“简单”的方法是添加另一个没有isRoaming参数的构造函数:在所有三个示例中,该值都是false。当您始终传递相同的值时:不要传递该值,而是使用构造函数伸缩来提供该值作为“默认值”。

除此之外,如果您愿意投入更多的时间,您应该在这里研究如何使用生成器模式。比如:

SettingRoamingItemBuilder().withText("").withProgressVisible(true)..
  .build()

关键是要确定所有这些参数中最常见的值,并将其用作默认值,这样只有那些偏离默认值的地方才需要调用以相应地更改默认设置。

祁博雅
2023-03-14

如果SettinRoamingItem在您的控制之下,您可以给它一些默认值,例如:

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)

但是接下来:你为什么想要这样的功能呢?

 类似资料:
  • 问题内容: 我有简单的spring- jpa配置,在其中配置了Hibernate的。这意味着,如果我的实体类具有一个变量,那么Hibernate应该将其转换为用于查询数据库。但是,在我升级到Hibernate 5之后,这种命名转换就停止了。 错误:“字段列表”中的未知列“ user0_.userName” 这是我的Hibernate配置: 这是我的Entity类: 我不想在@Column批注中显式

  • Hibernate 支持三种基本的继承映射策略: 每个类分层结构一张表(table per class hierarchy) table per subclass 每个具体类一张表(table per concrete class) 此外,Hibernate 还支持第四种稍有不同的多态映射策略: 隐式多态(implicit polymorphism) 对于同一个继承层次内的不同分支,可以采用不同的

  • 问题内容: 基本上,此代码在两个类中创建了两个线程,它们从第三类中调用。每个线程都有一个循环,每次循环后都会进入休眠状态。 (代码末尾) 输出为: 1)我不知道为什么它会这样工作。我的意思是应该先打印“ CHECK 0 CHECK”。但是,为什么在线程1之前打印CHECK 1 CHECK(而在代码中调用Thread1之后才打印),而对于CHECK 2 CHECK和Thread2却一样? 2)如果我

  • 问题内容: 来自问题的原因,或者说更确切地说,object .__new__在这两种情况下的工作方式不同 作者对为什么不感兴趣,而对如何感兴趣。 我非常想了解原因,尤其是: 为什么不打印任何参数而不是 为什么没有为testclass3引发错误?(因为除了自我之外没有其他参数) 码 问题答案: 您正在使用旧的Python版本;此错误消息已更新: Python只会抱怨既不支持又不被覆盖的参数。例如,当

  • 主要内容:Vim的命令模式,Vim的输入模式,Vim 的编辑模式通过前面的学习我们知道,Linux 系统中所有的内容都以文件的形式进行存储,当在命令行下更改文件内容时,常会用到文本编辑器。 我们首选的文本编辑器是 Vim(至于为什么,可查看《 Vi和Vim的区别和联系》一节)。使用 Vim 编辑文件时,存在 3 种工作模式,分别是命令模式、输入模式和编辑模式,这 3 种工作模式可随意切换,如图 1 所示。 图 1 Vim 的三种工作模式 Vim的命令模式 使用

  • 问题内容: 我有一个带有序列ID的postgres表。 插入通常发生在Web应用程序中。 我手动插入了两个新记录,将id设置为max(id)+1 **** 在这2次插入之后,当Web应用程序插入2条记录时,它会给出重复的键错误。 仅用于2条记录。之后,一切正常。 问题是-为什么我的手动插入没有增加序列号? 自动递增和串行是否不同? 我在这里想念什么?MySQL或任何其他SQL是否存在相同的问题?