这是我的整体工作流程.首先创建一个界面:
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)