假设我有四个类A,B,C和容器
我有以下对象以及如何通过仅向容器类添加代码来实现以下输出?
“con”对象的第一次调用应该对应于第一个参数。
非常感谢您的回答!
A a = new A();
B b = new B();
C c = new C();
Container con = new Container(a,b,c);
con.calling();
con.calling();
con.calling();
预期输出为:
calling from A
calling from B
calling from C
public class A {
public void callA() {
System.out.println("calling from A");
}
}
public class B {
public void callB() {
System.out.println("calling from B");
}
}
public class C {
public void callC() {
System.out.println("calling from C");
}
}
public class Container {
public Container(A a, B b, C c) {
}
public void calling(){
}
}
答案 0 :(得分:4)
看起来与Iterator
模式/接口非常相似。这里不是calling()
方法,而是next()
。
我可以为你画草图,例如:
import java.util.Arrays;
import java.util.Iterator;
public class Container implements Iterator {
private Iterator<?> iter;
public Container(Object ...values) {
this.iter = Arrays.asList(values).iterator();
}
@Override
public boolean hasNext() {
return iter.hasNext();
}
@Override
public Object next() {
return iter.next();
}
}
更新经过仔细审核后,我决定扩大答案。一般来说,Iterator
以上的决定只能给你一个粗略的想法。您可能需要更具体的决策,这里使用java-8
方法引用:
1)包含Runnable
个实例的容器:
import java.util.Arrays;
import java.util.Iterator;
public class Container implements Iterator {
private Iterator<Runnable> iter;
public Container(Runnable ...values) {
this.iter = Arrays.asList(values).iterator();
}
@Override
public boolean hasNext() {
return iter.hasNext();
}
@Override
public Object next() {
Runnable next = iter.next();
next.run();
return next;
}
}
示例代码来测试这些东西:
Container container = new Container(new A()::callA, new B()::callB, new C()::callC);
container.next();
container.next();
container.next();
在这种情况下,它不仅会返回你的下一个实例,还会调用所需的方法。
答案 1 :(得分:1)
我会添加一个变量来考虑执行调用方法的时间,这可能是Container类:
class Container {
int times = 0;
A objectA;
B objectB;
C objectC;
public Container(A a, B b, C c) {
this.objectA = a;
this.objectB = b;
this.objectC = c;
}
public void Calling(){
if(this.times==0){
a.callA();
}
if(this.times==1){
b.callB();
}
if(this.times==2){
c.callC();
}
this.times++;
}
}