使用java中的循环在不同的包中调用相同的类名

时间:2013-06-12 08:55:31

标签: java

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

pkg_1.operation;
pkg_2.operation;
pkg_3.operation;
.
.
.
pkg_n.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个包编写代码。 等待你的建议。 感谢

2 个答案:

答案 0 :(得分:4)

您可以使用反射 -

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

但是......通常你不能那样做,这是糟糕设计的标志。相反,可以使用接口及其多个实现,可能还有工厂。

另外,您没有遵循Java命名约定。

答案 1 :(得分: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界面。否则你需要再次使用Reflection:

clazz.getMethod("oper", Integer.class).invoke(object, 5);