如何在不同的类中共享相同的构造函数aka在接口中定义构造函数?
比方说,我有相同的构造函数在Android中的多个自定义视图
class Button: AppCompatButton { constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) { } constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { } constructor(context: Context) : super(context) { } //Some custom implementation //............ } class TextView: AppCompatTextView { constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) { } constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { } constructor(context: Context) : super(context) { } //Some custom implementation //............ }
所以我需要一些接口或基类,它允许我继承多个视图,如TextView,Button,EditText等。
就像是
abstract class BaseView<T : View> : T { constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) { } constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { } constructor(context: Context) : super(context) { } }
要么
interface ViewConstructor { constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) { } constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { } constructor(context: Context) : super(context) { } }
所以我只使用一个接口或基类,不要一次次复制过去的承包商。如何在Kotlin中实现这样的目标?
PS请不要建议使用基类作为查看并使用基类创建派生视图。 我正在使用XML,我需要EditText,Button和其他视图。
作为必须编写许多构造函数的解决方案,可以使用默认参数和@JvmOverloads
来轻松获取所有4个View
构造函数,而只需要为您的类编写主构造函数:
class CustomView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0 ) : View(context, attrs, defStyleAttr, defStyleRes) { }
你很难找到解决问题的办法。 首先,构造函数不是按照你的建议继承的。 它们存在初始化你的继承链的一部分,所以任何从你继承的人仍然需要转发到超类的构造函数。 我相当肯定你被卡在每个View类中重新声明这些视图构造函数(尽管其中一些可能会基于你的实例化用例而放弃)。
- AndroidStudio / Kotlin – 未解决的参考:ReadWriteProperty – Kotlin版本1.0.0-beta-1038
- 标签并不表示forEach中的循环
- Kotlin + MVP – 意外覆盖
- 如何使用OnClickListener创建简单的事件//更改文本或颜色
- 无法上传Android中的文件,并且没有错误的详细信息
- SonarQube:如何将多个质量配置文件应用于一个项目?
- Kotlin – NoSuchMethodError实例化Throwable时
- MediaStore.Images从拇指Uri / id获取完整图像
- Robolectric KeyStoreKeyGenerator