在 Java 中,
class BlaBlaThirty extends Parent {
void foo(String s, int i) {}
}
class BlaBlaTwentyNine extends Parent {
void foo(int i, Bla a, This t, Other o) {}
}
class BlaBlaFive extends Parent {
void foo(Bla a, Other o) {}
}
...
许多不同的类都具有方法 foo()。
ArrayList<Object> arr;
arr.add(blablai);
arr.add(blablaj);
arr.add(blablak);
...
数组 arr 包含许多对象,这些对象是这些类的实例。 问题是所有这些 foo() 方法没有相同的参数。如何使用正确的参数调用这些方法?
arr.get(i).foo(?,?,?);
我的解决方案:
所有 foo 方法都有一个 ArrayList params 参数,其中包含作为对象的所有所需参数:
class BlaBlaX {
void foo(ArrayList<Object> params) {}
}
然后,我在包含 foo 的类中添加 foo() 所需变量的变量名称。在调用 foo() 之前,我调用 getFooParams() :
class BlaBlaTwentyTwo extends Parent {
ArrayList<Object> getFooParams() {
ArrayList<String> p;
p.add("i");
p.add("banana");
p.add("volkswagen");
return p;
}
void foo(ArrayList<Object> params) {
Int i = (int) params.get(0);
Fruit banana = (Fruit) params.get(1);
Car volkswagen = (Car) params.get(2);
}
}
调用 foo() 方法的对象包含 foo() 中所需的所有变量:
class ObjCallingFoo {
int i;
Fruit banana;
car volkswagen;
//see below for what is here to call foo()
}
import java.lang.reflect.Method;
import java.lang.reflect.Field;
p = arr.get(i).getFooParams();
int size = p.size();
ArrayList<Object> arrParams = new ArrayList<>();
for (int i = 0; i < size; i++) {
String variableName = p.get(i);
Field field = objCallingFoo.getClass.getField(variableName);
arrParams.add(field);
}
我现在可以使用正确的参数调用 foo :
arr.get(i).foo(arrParams);
我还没有测试过。 您对此有何看法?
是否可以将代码存储在可以从另一个对象运行的对象中?
或者
如果我们不知道要作为参数传递给调用对象的方法的具体成员变量是什么,如何使用另一个对象的参数来调用方法?
最佳答案
您需要一个抽象,其中包括调用的特定方法以及如何调用它。这就是策略和命令设计模式可以做到的。
关于java - 是否可以将代码存储在可以从另一个对象运行的对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54503604/