在包未知的地方加载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
,如果它无法调用另一个包?将只使用两个包,并且没有同名的方法。您可以拥有从短类名到完整类名的映射,这也将有助于减少攻击面,因为它将阻止攻击者加载任意类,可能运行任意代码