我有不同的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个包编写代码。 等待你的建议。 感谢
答案 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);