簡體   English   中英

Java:傳遞對象實現接口

[英]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) { ... }

這是一個相關的教程:

Oracle Docs-綁定類型參數

特別注意這一段:

要聲明一個有界的類型參數,請列出該類型參數的名稱,然后是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM