在包未知的地方加载Java类

在包未知的地方加载Java类,java,reflection,Java,Reflection,我一直在使用下面的代码加载我知道要加载包的类 ClassLoader classLoader = ClassLoader.getSystemClassLoader(); Class<?> myClass = classLoader.loadClass(classNameToBeLoaded); ClassLoader ClassLoader=ClassLoader.getSystemClassLoader(); 类myClass=classLoader.loadClass(cla

我一直在使用下面的代码加载我知道要加载包的类

ClassLoader classLoader = ClassLoader.getSystemClassLoader();

Class<?> myClass = classLoader.loadClass(classNameToBeLoaded);
ClassLoader ClassLoader=ClassLoader.getSystemClassLoader();
类myClass=classLoader.loadClass(classNameToBeLoaded);
现在文件夹/包结构发生了更改

变量
classNameToBeLoaded
可以来自任何我事先不知道的包,因为类名来自用户提供的Excel工作表

例如,classNameToBeLoaded的值可以是从Excel文件读取的“Utils”、“FileValidation”等

这个类可以来自不同的包,比如“com.iyaffle.utils”或者“com.testing.validation”等等

当我们不知道包名时,如何使类自动加载

没有具体答案的其他类似线索:


    • 您确实需要知道加载类的完全限定名,有许多类具有相同的类名,唯一使它们保持不同的是包名

      下面是一个很好的例子:

      • java.awt.List
      • java.util.List
      如果类没有您需要调用的公共方法,您可以像现在一样加载它们,但添加包名


      调用公共方法最安全的方法是拥有一个静态接口或抽象类,所有动态类都将其扩展,这样您就可以将动态加载的类实例视为实现公共方法的实例。

      您不能这样做。让用户提供包名。@EJP:将只使用两个包,并且没有同名的方法。为什么不为一个包调用
      loadClass
      ,如果它无法调用另一个包?将只使用两个包,并且没有同名的方法。您可以拥有从短类名到完整类名的映射,这也将有助于减少攻击面,因为它将阻止攻击者加载任意类,可能运行任意代码