我正在寻找一种从类搜索路径中的jar文件中实例化对象的方法,我知道类的名称及其扩展的父类及其实现的接口,不幸的是我无法找到迄今为止的解决方案。 所以,假设如下:
sub change_cg_name {
if(!-e $output_running) {
print ("show running file not available. test case failed. [$output_running]");
return 0;
}
if(!-e $bat_file_path) {
print ("bat file not available test case filed. [$bat_file_path]");
return 0
}
my $from_word=`grep 'config-group type node IMPT_' $bat_file_path | awk '{print \$(4)}'`;
my $to_word= `grep 'config-group type node IMPT_' $output_running | awk '{print \$(4)}'`;
print("from WORD IS [$from_word]");
print("TO WORD IS [$to_word]");
if($to_word ne "") {
if (index($to_word, "IMPT_") != -1) {
system("perl -i -p -e 's/"$from_word"/"$to_word"/ee' $bat_file_path");
system("perl -p -i -e 's/\r\n$/\n/g' $bat_file_path");
print("ARUL changed the impt name in the bat file [$to_word] and file [$bat_file_path]");
return 0;
}
}
}
然后:
interface Modifier{
//is basically just a flag
}
然后:
public class ModifierImpl implements Modifier{
//some methods
}
这些接口/类进入了一个jar,我在我的项目中导入dinamically然后我想实例化public class CustomModifierImpl extends ModifierImpl{
//some implementation here
}
的实例
因为我知道班级CustomModifierImpl
是通用的,我认为类似的东西是可能的,但不是:
Class
当我这样做时,我得到了类型不匹配,有没有其他方法可以实现这一点?我不想在我的程序中使用private Class<ModifierImpl> loadClass(String fullClassName) {
Class<ModifierImpl> clazz;
try {
clazz= urlLoader.loadClass(fullClassName);
} catch (ClassNotFoundException e) {
return null;
}
return clazz;
}
的实例,因为我可能需要做几十个演员。
这也行不通:
Class<?>
谢谢
答案 0 :(得分:2)
从.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 aClass;
ClassLoader classLoader = test.class.getClassLoader();
try {
aClass = classLoader.loadClass(fullClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
一旦你上课了,你可以实例化它:
Class<?> clazz = Class.forName(fullClassName);
Constructor<?> constructor = clazz.getConstructor();
Object result = constructor.newInstance();