用多参数扩展类
我有一个叫做A的类:
open class A (a: String, b: String, c: String)
而一个扩展了A的类B:
class B(a: String, b: String, c: String, d: String) : A(a, b, c)
我的问题是,如果有办法做这样的事情,为了避免在B构造函数中声明A的所有参数:
class B(super, d:String) : A(super)
如果不是,应该有=)
您可以为这些类创建一个通用的接口,然后使用委派来完成您想要的任务。 喜欢这个:
interface C { val a: String val b: String val c: String } class A(override val a: String, override val b: String, override val c: String) : C class B(c: C, val d: String) : C by c
这样做,你可以像这样实例化一个B
:
val b = B(A("1", "2", "3"), "4")
不 ,Kotlin不包含任何允许您简化与超类参数匹配的构造函数参数的构造。
我不认为我同意这应该是该语言的一个function,但是我建议如果您认为应该在YouTrack上开始对话。
当你遇到这个问题时,你应该问自己为什么这样的类需要很多参数/依赖,而不是通过语言语法找出解决方案。 也许它的责任是不清楚的。
如果在一个类中混合了许多领域概念,那么你需要重新设计你的类,如下所示:
data class C(val a: String, val b: String, val c: String) open class A(val c:C) class B(c:C, val d: String) : A(c)
如果你发现B
不是-A A
,那么你必须使用组合而不是inheritance,例如:
open class A (a: String, b: String, c: String) class B(val a:A, val d: String)
不,没有这样的方式。 不幸的是,你需要手动执行此操作
- Kotlin&Hibernate IllegalArgumentException:无法将字符串字段Job.name设置为Job
- 无法在Kotlin中“findViewById”。 获取错误“types推断失败”
- 在IntelliJ的Kotlin> Java转换之后,将源代码恢复为Java
- 在Kotlin中创建一个注释实例
- 如何为kotlin中的函数参数设置不为null
- 参考与价值比较
- 运行Kotlin代码时,Android Studio会抛出java.lang.ClassNotFoundExceptionexception
- Kotlin中的整数是否等于数学expression式?
- kotlin-kapt插件不使用“kapt.generateStubs”