Java中对接口敏感的操作

Kev*_*lan 2 java interface

这是我的整体工作流程.首先创建一个界面:

public interface foo {
   void bar(Baz b);
}
Run Code Online (Sandbox Code Playgroud)

然后制作一个包含所有实现所述接口的不同对象的向量:

myVector.add(new Ex);  //both Ex and Why implement foo.
myVector.add(new Why); 
Run Code Online (Sandbox Code Playgroud)

最后,使用界面:

for(int i=0; i<myVector.size(); i++) {
    myVector.get(i).bar(b);
}
Run Code Online (Sandbox Code Playgroud)

但是,由于显而易见的原因,这会产生编译时错误:

对于Object类型,方法bar()未定义

由于Ex和Why不相关,因此转换不起作用.尝试捕捉铸造到Ex然后为什么是一个可怕的解决方案.让Ex和Why扩展Bar_doers也听起来也不简洁,因为这会消除接口.

如何执行关心Object是否实现给定接口的操作,而不是对象是否属于给定类?

Oli*_*rth 11

你需要阅读有关泛型的内容.

假设您使用的是标准Java容器,那么您的案例中的解决方案就是定义myVector:

List<foo> myVector = new ArrayList<foo>();
Run Code Online (Sandbox Code Playgroud)

  • @Pankaj:如果他们实现`Foo`,那么他们可以添加到这个列表中. (2认同)