Java:传递对象实现接口

时间:2014-08-13 12:44:01

标签: java objective-c interface parameter-passing protocols

在Objective-C中,可以传递一个函数参数,其类型为Object<Protocol>,其含义为#34;一个Object类型的对象,它实现了协议协议&#34;。我想知道是否有办法在Java中做同样的事情,例如&#34;一个实现一些自定义界面的Android视图&#34; (protocol = java interface)。

1 个答案:

答案 0 :(得分:3)

您可以使用泛型来指定参数实现接口:

public <T extends Protocol> void foo(T t) { ... }

这可以扩展为指定多个边界。类型必须是所有指定类型的子类型。 Object不是最好的例子,但在这里您可以指定它:

public <T extends Object & Protocol> foo(T t) { ... }

这是一个相关的教程:

Oracle Docs - Bounded Type Parameters

特别注意这一段:

  

要声明有界类型参数,请列出类型参数的名称,   接下来是extends关键字,后跟其上限,其中包含   这个例子是Number。请注意,在此上下文中,使用了extends   一般意义上的意思是&#34;延伸&#34; (如课程中)或   &#34;器具&#34; (如在接口中)。

这里出乎意料的部分是extends也用于接口。

请注意,您也可以在没有泛型的情况下获得所需的行为(请参阅下面的评论):

public void foo(Protocol p) { ... } 

因为这允许任何协议的对象。如果要使用此方法指定多个接口,则可以创建第三个接口来实现另外两个接口。但是,这假设您可以控制应该能够作为参数传递的类,因为您需要实现该接口。


如果您通过&#34;常规&#34;泛型类型参数,您只需直接指定类型:

public void foo(Object<Protocol> o) {
    // TODO: Implement
}