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

在java中使用循环调用不同包中的相同类名,java,Java,我有相同类名的不同java包 pkg_1.operation; pkg_2.operation; pkg_3.operation; . . . pkg_n.operation; 我做了一个类名测试,我想从每个包调用方法操作。 我想使用循环来避免硬编码。 像 (i=0;i

我有相同类名的不同java包

pkg_1.operation;
pkg_2.operation;
pkg_3.operation;
.
.
.
pkg_n.operation;
我做了一个类名测试,我想从每个包调用方法操作。 我想使用循环来避免硬编码。 像

(i=0;i { pkg_i.opeartion obj=新的pkg_i.operation(); string output=obj.oper(5);//oper是方法名 } 但是我找不到容易做到这一点的方法,请你指导我如何才能轻松做到这一点。 否则,如果我有50个包,那么我必须在实例化中为50个包编写代码。 等待你的建议。
谢谢

您可以使用反射-

Class<?> clazz = Class.forName("pkg_" + i + ".operation");
Object obj = clazz.newInstance();
String output = clazz.getMethod("oper").invoke(obj, 5);
Class clazz=Class.forName(“pkg_uji”+i+.operation”);
Object obj=clazz.newInstance();
字符串输出=clazz.getMethod(“oper”).invoke(obj,5);
但是。。。通常情况下,你不能这样做,这是一个坏设计的迹象。相反,使用一个接口和它的多个实现,可能是一个工厂


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

您可以使用反射-

Class<?> clazz = Class.forName("pkg_" + i + ".operation");
Object obj = clazz.newInstance();
String output = clazz.getMethod("oper").invoke(obj, 5);
Class clazz=Class.forName(“pkg_uji”+i+.operation”);
Object obj=clazz.newInstance();
字符串输出=clazz.getMethod(“oper”).invoke(obj,5);
但是。。。通常情况下,你不能这样做,这是一个坏设计的迹象。相反,使用一个接口和它的多个实现,可能是一个工厂

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

使用反射:

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

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

强制转换不起作用,因为每次它都是一个不同的操作类,然后用调用替换为
getMethod
invoke
。强制转换不起作用,因为它每次都是不同的操作类,然后用
getMethod
invoke
调用替换。当我这样做时,线程“main”java.lang.NoSuchMethodException:mutants.AOIS_1.ArithOper.oper()在java.lang.class.getMethod(未知源代码)在Test.main(Test.java:31)中会发生以下错误,那就不是了。要么它不是公共的,要么它根本不存在。当我这样做时,线程“main”java.lang.NoSuchMethodException中会发生以下错误异常:mutants.AOIS_1.ArithOper.oper()位于java.lang.Class.getMethod(未知源代码)的Test.main(Test.java:31)的java.lang.Class.getMethod(未知源代码)的位置,那么它就不存在了。要么它不是公开的,要么它根本不存在。