我有几个不同的类来实现接口,如下所示:
public class Class1 implements interface1 {
@Override
public void action(){
//do somethod
}
}
public class Class2 implements interface1 {
@Override
public void action(){
//do somethod
}
}
public class Class3 implements interface1 {
@Override
public void action(){
//do somethod
}
}
我的问题是,当我初始化这些类时,如何在循环中为每个类调用action方法。我正在考虑将它们存储在列表中,然后遍历它并调用它们,但我无法实现它。
答案 0 :(得分:0)
如果你有不同的类来实现某些接口,你可以用多态方式处理它们。
首先,让我们根据java代码约定更改你的代码:
public interface Interface {
void action();
}
public class ClassOne implements Interface {
@Override
public void action(){
System.out.println("class one action");
}
}
public class ClassTwo implements Interface {
@Override
public void action(){
System.out.println("class two action");
}
}
public class ClassThree implements Interface {
@Override
public void action(){
System.out.println("class three action");
}
}
之后创建列表并向其添加新实例并为列表中的每个元素调用方法action()
,您不需要知道列表中实际存在哪些类实例,您只需要知道所有这些都实现了某种界面。
List<Interface> list = new ArrayList<>();
list.add(new ClassOne());
list.add(new ClassTwo());
list.add(new ClassThree());
for(Interface instance : list) {
instance.action();
}
输出将是:
class one action
class two action
class three action
P.S。你甚至可以用java 8/9
在一行中写这个java 8
Arrays.asList(new ClassOne(), new ClassTwo(), new ClassThree()).forEach(System.out::println);
java 9
List.of(new ClassOne(), new ClassTwo(), new ClassThree()).forEach(System.out::println);