Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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_Reflection_Terminal_Main - Fatal编程技术网

通过终端执行java实例方法

通过终端执行java实例方法,java,reflection,terminal,main,Java,Reflection,Terminal,Main,我有一个例子。基本结构是 class Instance{ public void load(){ ... } public boolean execute(){ ... return true; } } 通常我们可以在static void main(String args[])中执行此实例,但是如何从终端或编译文件执行此实例->load()->execute()。类在main方法中调用,而不是使用反射执行定

我有一个例子。基本结构是

class Instance{

    public void load(){
        ...
    }

    public boolean execute(){
        ...
        return true;
    }

}
通常我们可以在
static void main(String args[])
中执行此实例,但是如何从终端或编译文件
执行此实例->
load()
->
execute()
。类在
main
方法中调用,而不是使用反射执行定义的方法。
因为此实例的行为类似于out项目上的脚本,但我们并没有将主函数定义到类中


有人帮忙吗?

我建议只添加一个调用
load()
execute()
public static void main(字符串args[])
,这样就可以从命令行以通常的方式执行类。构建一个基于反射的包装器,只需要它自己的
publicstaticvoidmain(stringargs[])
就可以使问题过于复杂化。我建议只添加一个调用
load()
execute()的
publicstaticvoidmain(stringargs[])
,这样您的类就可以按照通常的方式从命令行执行。通过构建一个基于反射的包装器来使问题过于复杂化是没有意义的,它只需要自己的
公共静态void main(String args[])

我们如何从终端执行这个实例->加载()->执行()

你不能

可能是这样,但目前还没有从命令行运行方法的正式方法

类在主方法中调用,而不是使用反射

正如你所说,使用反射:

File pathToClass = new File("C:\\Some Folder\\");

Class<?> loaded = null;
try {
    ClassLoader loader = new URLClassLoader(new URL[] {pathToClass.toURL()});
    loaded = loader.loadClass("some.package.foo.Instance");
} catch(Exception e) {
    //do something
}

Object i = loaded.newInstance();
Method method = loaded.getMethod("execute");
Boolean returnValue = (Boolean) method.invoke(i);
File pathToClass=新文件(“C:\\Some Folder\\”;
加载的类=null;
试一试{
ClassLoader=newURLClassloader(新URL[]{pathToClass.toURL()});
loaded=loader.loadClass(“some.package.foo.Instance”);
}捕获(例外e){
//做点什么
}
对象i=loaded.newInstance();
Method=loaded.getMethod(“执行”);
布尔返回值=(布尔)方法。调用(i);
但我建议不要这样做——通常有更好的方法,它会使一切变得过于复杂

我们如何从终端执行这个实例->加载()->执行()

你不能

可能是这样,但目前还没有从命令行运行方法的正式方法

类在主方法中调用,而不是使用反射

正如你所说,使用反射:

File pathToClass = new File("C:\\Some Folder\\");

Class<?> loaded = null;
try {
    ClassLoader loader = new URLClassLoader(new URL[] {pathToClass.toURL()});
    loaded = loader.loadClass("some.package.foo.Instance");
} catch(Exception e) {
    //do something
}

Object i = loaded.newInstance();
Method method = loaded.getMethod("execute");
Boolean returnValue = (Boolean) method.invoke(i);
File pathToClass=新文件(“C:\\Some Folder\\”;
加载的类=null;
试一试{
ClassLoader=newURLClassloader(新URL[]{pathToClass.toURL()});
loaded=loader.loadClass(“some.package.foo.Instance”);
}捕获(例外e){
//做点什么
}
对象i=loaded.newInstance();
Method=loaded.getMethod(“执行”);
布尔返回值=(布尔)方法。调用(i);

不过,我建议不要这样做——通常有更好的方法,它会使一切变得过于复杂。

你不能。您可以将字符串“execute”或“load”作为参数传入,并根据作为参数传入的字符串从主方法调用该方法。您不能这样做。您可以将字符串“execute”或“load”作为参数传入,并根据作为参数传入的字符串从主方法调用该方法。