从 class 搜索路径中的 jar 加载并实例化 class
Load and instantiate class from jar in class search path
我正在寻找一种从我的 class 搜索路径中的 jar 文件实例化对象的方法,我知道 class 的名称和它扩展的父 class及其实现的接口,不幸的是,到目前为止我还没有找到解决方案。
因此,假设如下:
interface Modifier{
//is basically just a flag
}
然后:
public class ModifierImpl implements Modifier{
//some methods
}
然后:
public class CustomModifierImpl extends ModifierImpl{
//some implementation here
}
那些 interfaces/classes 被放入我在我的项目中动态导入的 jar 中,然后我想实例化 CustomModifierImpl
的实例
因为我知道 class Class
是通用的,所以我认为这样的事情是可能的,但它不是:
private Class<ModifierImpl> loadClass(String fullClassName) {
Class<ModifierImpl> clazz;
try {
clazz= urlLoader.loadClass(fullClassName);
} catch (ClassNotFoundException e) {
return null;
}
return clazz;
}
我在执行此操作时遇到类型不匹配问题,有没有其他方法可以实现此目的?我不想在我的程序周围使用 Class<?>
的实例,因为我可能需要做几十次转换。
这也行不通:
private Class<ModifierImpl> loadClass(String fullClassName) {
Class<ModifierImpl> clazz;
try {
clazz= urlLoader.loadClass(fullClassName).cast(clazz);
} catch (ClassNotFoundException e) {
return null;
}
return clazz;
}
谢谢
从 .class 文件加载 class
File file2 = new File ("c:\myclasses\");
// Convert File to a URL
URL url = file2.toURL(); // file:/c:/myclasses/
URL[] urls = new URL[]{url};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls);
// Load in the class;
Class cls = cl.loadClass("test.MyClass");
获取 class:
Class aClass;
ClassLoader classLoader = test.class.getClassLoader();
try {
aClass = classLoader.loadClass(fullClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
一旦你有了class,你就可以实例化它了:
Class<?> clazz = Class.forName(fullClassName);
Constructor<?> constructor = clazz.getConstructor();
Object result = constructor.newInstance();
我正在寻找一种从我的 class 搜索路径中的 jar 文件实例化对象的方法,我知道 class 的名称和它扩展的父 class及其实现的接口,不幸的是,到目前为止我还没有找到解决方案。 因此,假设如下:
interface Modifier{
//is basically just a flag
}
然后:
public class ModifierImpl implements Modifier{
//some methods
}
然后:
public class CustomModifierImpl extends ModifierImpl{
//some implementation here
}
那些 interfaces/classes 被放入我在我的项目中动态导入的 jar 中,然后我想实例化 CustomModifierImpl
因为我知道 class Class
是通用的,所以我认为这样的事情是可能的,但它不是:
private Class<ModifierImpl> loadClass(String fullClassName) {
Class<ModifierImpl> clazz;
try {
clazz= urlLoader.loadClass(fullClassName);
} catch (ClassNotFoundException e) {
return null;
}
return clazz;
}
我在执行此操作时遇到类型不匹配问题,有没有其他方法可以实现此目的?我不想在我的程序周围使用 Class<?>
的实例,因为我可能需要做几十次转换。
这也行不通:
private Class<ModifierImpl> loadClass(String fullClassName) {
Class<ModifierImpl> clazz;
try {
clazz= urlLoader.loadClass(fullClassName).cast(clazz);
} catch (ClassNotFoundException e) {
return null;
}
return clazz;
}
谢谢
从 .class 文件加载 class
File file2 = new File ("c:\myclasses\");
// Convert File to a URL
URL url = file2.toURL(); // file:/c:/myclasses/
URL[] urls = new URL[]{url};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls);
// Load in the class;
Class cls = cl.loadClass("test.MyClass");
获取 class:
Class aClass;
ClassLoader classLoader = test.class.getClassLoader();
try {
aClass = classLoader.loadClass(fullClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
一旦你有了class,你就可以实例化它了:
Class<?> clazz = Class.forName(fullClassName);
Constructor<?> constructor = clazz.getConstructor();
Object result = constructor.newInstance();