[英]Java: passing object implementing interface
在Objective-C中,可以傳遞類型為Object<Protocol>
類型的函數參數,其含義是“實現協議Protocol的Object類型的對象”。 我想知道在Java中是否有一種方法可以做到這一點,例如“實現某些自定義接口的Android View”(協議= java接口)。
您可以使用泛型來指定參數實現接口:
public <T extends Protocol> void foo(T t) { ... }
可以擴展以指定多個范圍。 該類型必須是所有指定類型的子類型。 Object
不是最好的示例,但是可以通過以下方法指定它:
public <T extends Object & Protocol> foo(T t) { ... }
這是一個相關的教程:
特別注意這一段:
要聲明一個有界的類型參數,請列出該類型參數的名稱,然后是extends關鍵字,然后是其上限(在本示例中為Number)。 請注意,在這種情況下,extends通常用於表示“擴展”(如在類中)或“實現”(如在接口中)。
這里意外的部分是, extends
也用於接口。
請注意,您也可以在沒有泛型的情況下獲得所需的行為(請參見下面的注釋):
public void foo(Protocol p) { ... }
因為這允許對任何對象,它是-一個協議。 如果要使用此方法指定多個接口,則可以例如創建第三個實現其他兩個接口的接口。 但是,這假定您在控制應該作為參數傳遞的類,因為您需要實現該接口。
如果要傳遞“常規”泛型類型參數,則只需直接指定類型:
public void foo(Object<Protocol> o) {
// TODO: Implement
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.