gpt4 book ai didi

android - 如何在不同的类之间共享相同的构造函数,也就是在接口(interface)中定义构造函数?

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:31 25 4
gpt4 key购买 nike

假设我在 Android 中有多个具有相同构造函数的自定义 View

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
//............
}

所以我需要一些接口(interface)或基类,它们允许我继承多个 View ,如 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) {
}
}

所以我只使用一个接口(interface)或基类,而不是一次又一次地复制过去的承包商。如何在 Kotlin 中实现这样的目标?

附言请不要建议使用基类作为 View 并使用基类创建派生 View 。我正在使用 XML,我需要 EditText、Button 和其他 View 。

最佳答案

编辑:我只是偶然发现了这个答案,它需要更新。使用 @JvmOverloads 在某些自定义 View 中可能是一个问题,因为调用为您自己的类生成的任何构造函数将首先委托(delegate)给类中的全参数构造函数,然后调用全参数super 的构造函数,而不是每个构造函数都使用匹配数量的参数调用 super 方法。参见 this article (例如)了解详情。

下面是我的回答原文。


作为必须编写那么多构造函数的解决方案,您可以将默认参数与 @JvmOverloads 结合使用,轻松获得所有 4 个 View 构造函数,而只需编写一个主要构造函数类的构造函数:

class CustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
defStyleRes: Int = 0
) : View(context, attrs, defStyleAttr, defStyleRes) {

}

关于android - 如何在不同的类之间共享相同的构造函数,也就是在接口(interface)中定义构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44103610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com