[英]How to make an Interface with Generic type and inheritance of Android Fragment?
[英]How to specify a data type such that inheritance and interface are enforced?
如何指定(抽象?)數據類型(或 typealias 等) 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
這是一個 class 滿足標准 1.(因為“LottieAnimationView”是View
的子類)和 2.,即它可以同時轉換為View
和MyInterface
。 我不確定如何在foo
的聲明中強制執行 1. 和 2. 。
如果存在包含View
的所有公共符號的接口IView
,我會這樣做: interface MyType: IView, MyInterface
,但據我所知,這樣的接口並不存在。
因此,您想將MyType
定義為具有 View 超類並實現MyInterface
嗎? 接口不能從類繼承,因此MyType
必須是子類View
的 class 。
如果您的具體實現所有子類都可以,但是因為您使用的類是您無法控制的,據我所知( LottieAnimationView
),您不能使它們從您的超類型繼承。
您可能可以使用 generics 來解決一些問題(我不確定您是否能夠傳遞 class 類型並調用構造函數將其用作超類型),否則您可能只想創建一個包含 a2F2ED4F8EBC012ABCB4C2 的包裝器 ZA2F2ED4F8EBC012ABCB4C2 View
,你可以把你喜歡的東西放在那里。
類型別名實際上只是標簽。 它們非常適合可讀性並使您的定義更清晰 - 例如具有PhoneNumber
類型的phoneNumber
屬性,這只是String
的別名,或者具有(Int) -> Unit
function 類型並命名為ResultListener
。 但是沒有什么能阻止你將一個普通的舊String
傳遞給一個PhoneNumber
屬性,因為它們是相同的,它們實際上不是單獨的類型或任何東西。 所以我認為就類型系統而言,你不能用它們做任何聰明的事情!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.