Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为运行时加载的类的函数正确定义参数?_Java_Talend - Fatal编程技术网

Java 如何为运行时加载的类的函数正确定义参数?

Java 如何为运行时加载的类的函数正确定义参数?,java,talend,Java,Talend,我已经创建了一个应该在运行时加载的Talend作业。我正在代码中动态加载jobjar。加载后,我需要调用一个函数来执行作业 为了完成它,我遵循了问题的答案。但是当调用该函数时,我会得到java.lang.NoSuchMethodException。我认为问题出在函数的参数类型定义上,但我很难正确定义它 这是我的密码: String args[] = new String[7]; args[0] = "myParams"; File jobJar = new File("myjar.jar");

我已经创建了一个应该在运行时加载的Talend作业。我正在代码中动态加载jobjar。加载后,我需要调用一个函数来执行作业

为了完成它,我遵循了问题的答案。但是当调用该函数时,我会得到
java.lang.NoSuchMethodException
。我认为问题出在函数的参数类型定义上,但我很难正确定义它

这是我的密码:

String args[] = new String[7];
args[0] = "myParams";

File jobJar = new File("myjar.jar");
URL [] urls = new URL[1];
urls[0] = jobJar.toURI().toURL();

Class<?>[] params_type = new Class[]{args.getClass()}; //is it correct?

URLClassLoader child = new URLClassLoader(urls , this.getClass().getClassLoader());
Class classToLoad = Class.forName ("com.my.myTalendClass", true, child);
Method method = classToLoad.getDeclaredMethod ("runJobInTOS", params_type);
Object instance = classToLoad.newInstance();
Object result = method.invoke(instance,new Object[]{ args });
String args[]=新字符串[7];
args[0]=“myParams”;
File jobJar=新文件(“myjar.jar”);
URL[]URL=新URL[1];
URL[0]=jobJar.toURI().tour();
类[]参数类型=新类[]{args.getClass()}//对吗?
URLClassLoader child=新的URLClassLoader(URL,this.getClass().getClassLoader());
Class classToLoad=Class.forName(“com.my.myTalendClass”,true,child);
方法Method=classToLoad.getDeclaredMethod(“runJobInTOS”,参数类型);
对象实例=classToLoad.newInstance();
Object result=method.invoke(实例,新对象[]{args});
函数
runJobInTOS
将字符串数组作为参数接收

为什么要使用

Object result = method.invoke(instance,new Object[]{ args });
但不是

Object result = method.invoke(instance,args);

在代码中,将二维数组传递给方法,而不是普通的字符串数组

如果知道类名和方法名,为什么要使用反射?因为talend作业的类是在数据库中定义的,可以随时更改。按照您的建议传递参数会出现错误,即
参数数量错误
您是否发布了文章的链接?对不起,谢谢。这个链接很有用!但我也将
args.getClass()
更改为
String[].getClass()
。。不知道有什么区别。