【发布时间】:2018-03-21 03:32:30
【问题描述】:
我有一堂课有2个案例,一个是这样的:
class User {
private val name:Name = NameGenerator()
fun sayName() {
println(this.name.fakeName)
}
}
另一个是:
class User(suggestion:String) {
private val name:Name = NameGenerator(suggestion)
fun sayName() {
println(this.name.fakeName)
}
}
现在你看到了不同之处,这就是name,它有两种不同的初始化方式。
在这种情况下,我如何为 DRY 编写一个基类?
我最终得到了这样的结果:
abstract class BaseUser {
protected val name:Name = MockName()
fun sayName() {
println(this.name.fakeName)
}
}
然后我可以像这样使用它:
class UserCaseOne():BaseUser() {
}
class UserCaseTwo(suggestion:String):BaseUser() {
init {
this.name = NameGenerator(suggestion)
}
}
考虑到我必须使用模拟对象来初始化,这很糟糕。
有没有更好的方法来做到这一点?不注入实现?我不想强制 UserCaseTwo 有一个冗余的构造函数。
【问题讨论】:
标签: kotlin jvm refactoring dry