【发布时间】:2021-04-19 15:41:29
【问题描述】:
如何指定(抽象?)数据类型(或类型别名等)MyType 以便强制执行这些条件:
-
MyType是android.view.View的子类 -
MyType实现接口MyInterface
用例:我想要一个界面
interface OtherInterface {
fun foo(context: Context): MyType
}
可以将foo 返回的实例添加到FrameLayout(使用ViewGroup::addView(view: View)),以及调用我在MyInterface 中指定的函数。
我想到的具体返回类型 foo 的示例是
class MyImpl : com.airbnb.lottie.LottieAnimationView, MyInterface
这是一个满足标准 1.(因为“LottieAnimationView”是 View 的子类)和 2. 的类,即它可以同时转换为 View 和 MyInterface。我不确定如何在foo 的声明中强制执行 1. 和 2.。
如果存在包含View 的所有公共符号的接口IView,我会这样做:interface MyType : IView, MyInterface,但据我所知,这样的接口不存在。
【问题讨论】:
-
欢迎来到 Stack Overflow!你说你的标准是让
MyType是一个接口,但还是一个子类?这是不可能的,你不能有一个从具体类继承的接口。 -
我已经不太精通Android了,尤其是在子类化
View方面,但是class MyType(...) : View(...), MyInterface { ... }有问题吗? -
我正要准确评论@Joffery。这个问题似乎描述了实现......
-
我不认为你可以,因为这符合你的标准
abstract class MyType(...) : View(...), MyInterface,但这会让你想要通过的任何视图都是MyType的实现,这意味着重新创建每次都能看到全貌。例如TextView你不能,你必须实现MyType复制/粘贴整个TextView代码。除非,如果MyType是一个视图组并且包含在View内? -
@Joffrey 抱歉,我想我没有完全描述我的问题。我已经更新了这个问题,希望现在更清楚了。