繁体   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