gpt4 book ai didi

java - OOP中如何按参数顺序调用方法?

转载 作者:行者123 更新时间:2023-11-29 07:30:42 24 4
gpt4 key购买 nike

假设我有四个类 A、B、C 和 Container

我有以下对象以及如何通过仅向容器类添加代码来实现以下输出?

“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(){

}
}

最佳答案

看起来非常类似于 Iterator 模式/接口(interface)。这里不是 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();

在这种情况下,它不仅会返回下一个实例,还会调用所需的方法。

关于java - OOP中如何按参数顺序调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43259550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com