Kotlin能否自动生成与父类构造签名匹配的派生类构造器?
探讨Kotlin中派生类自动继承父类主构造器的可能性
其实我也一直在琢磨这个问题——虽然暂时没有实际项目里用到这种特性的案例,但我确实设想过这样的语法糖能解决不少维护上的麻烦。先给你看看常规的实现方式:
abstract class Greeter(val firstName: String, val lastName: String) { abstract fun greet() } class Formal(firstName: String, lastName: String): Greeter(firstName, lastName) { override fun greet() { println("Hello $firstName $lastName!") } } class Informal(firstName: String, lastName: String): Greeter(firstName, lastName) { override fun greet() { println("Hi $firstName!") } }
现在的痛点很明显:每一个派生类都必须显式定义和父类完全一致的构造参数,还要手动调用父类构造器。如果哪天父类的主构造器需要修改(比如新增一个middleName参数),所有派生类都得跟着调整构造参数和父类调用逻辑,在派生类数量多的场景下,这简直是个噩梦。
我一直在想,能不能有更简洁的写法,比如这样:
class Informal(*): Greeter(*) { override fun greet() { println("Hi $firstName!") } }
这种语法的核心期望是:
- 编译器自动生成和父类主构造器签名完全匹配的派生类构造器
- 自动完成父类主构造器的调用,不需要手动写参数传递逻辑
这样一来,父类构造器的变更就能自动同步到所有派生类,彻底消除重复代码,也避免了遗漏修改的风险。
内容的提问来源于stack exchange,提问作者Ivan Pavlukhin
相关产品推荐
相关产品推荐

