java - 是否可以将代码存储在可以从另一个对象运行的对象中?

标签 java

在 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/

相关文章:

java - SelectOutPut (AnyLogic) 中代理类型的条件

java - 如何通过 SSH 在远程服务器上部署 Spring MVC 应用程序?

java - 如何列出kafka集群的所有生产者?

java - Liferay,如何获取根记录器?

java - 如何公开服务器socket信息?

java - Log4j 找不到记录器的附加程序 (org.apache.hadoop.util.shell)

java - Google App Engine 的 JRE 不支持 GWT 和 LocalDate

JavaFX Dialog getResult() 方法未返回正确的泛型类型

java - 在Java中定义静态数组

java - 如何在Java中连接到受密码保护的系统上运行的服务器?