0

我有不同的java包具有相同的类名。假设

pkg_1.operation;
pkg_2.operation;
pkg_3.operation;
.
.
.
pkg_n.operation;

我做了一个类名测试,我想从每个包中调用方法 Operation。我想使用循环来避免硬编码。喜欢

for(i=0;i< n;i++)
{
    pkg_i.opeartion obj=new pkg_i.operation();
    string output = obj.oper(5); //oper is the method name
}

但是我找不到轻松做到这一点的方法,请您指导我如何轻松做到这一点。否则,如果我有 50 个包,那么我必须在实例化中为 50 个包编写代码。等待您的建议。谢谢

4

2 回答 2

4

您可以使用反射 -

Class<?> clazz = Class.forName("pkg_" + i + ".operation");
Object obj = clazz.newInstance();
String output = clazz.getMethod("oper").invoke(obj, 5);

但是......通常你不能这样做,这是糟糕设计的标志。相反,使用一个接口和它的多个实现,可能与一个工厂一起使用。

此外,您没有遵循 java 命名约定。

于 2013-06-12T09:02:13.597 回答
1

使用反射:

for (int i = 0; i < n ; i++) {
    Class<?> clazz = Class.forName("pkg_" + i + ".operation");
    Object object = clazz.newInstance();
    String output = ((Operation) object).oper();
}

假设您的所有班级都有一个通用Operation接口。否则你需要再次使用反射:

clazz.getMethod("oper", Integer.class).invoke(object, 5);
于 2013-06-12T09:05:37.023 回答