gpt4 book ai didi

scripting - 我可以实例化来自另一个 Beanshell 脚本的 beanshell 类吗?

转载 作者:行者123 更新时间:2023-12-02 22:59:04 26 4
gpt4 key购买 nike

我想运行从不同 beanshell 文件导入的类。但我不知道如何从主 beanshell 文件实例化类。这可能吗?

我导入的类:

class HelloW {
public void run(){
print("Hello World");
}
}

应运行并实例化类的主 beanshell 文件:

Interpreter i = new Interpreter();
i.source("HelloW.bsh");

最佳答案

BeanShell documentation在这方面相当不错,所以你应该先阅读一下。就您而言,几乎没有问题。也就是说,有脚本对象。此外,您启动的 .bsh 文件需要执行脚本对象。以您的示例为例,这段代码应该可以工作:

Hello() {
run(){
print("Hello World");
}

return this;
}

myHello = Hello();
myHello.run(); // Hello World

*BeanShell 2.0b1 及更高版本支持脚本类的更新答案*:

我创建了两个 beanshell 文件并将它们放在“scripts”目录中。

我相信,第一个“executor.bsh”就是您所说的“父”脚本。

// executor.bsh

addClassPath(".");
importCommands("scripts");

source(); // This runs the script which defines the class(es)

x = new HelloWorld();
x.start();

第二个文件包含脚本类。请注意,我使用的是脚本命令,并且根据 BeanShell 文档,文件名必须与命令名相同。

// source.bsh

source() {
public class HelloWorld extends Thread {
count = 5;
public void run() {
for(i=0; i<count; i++)
print("Hello World!");
}

}
}

我在 java 类中调用了 executor.bsh:

Interpreter i = new Interpreter();
i.source("scripts/executor.bsh");

// Object val = null;
// val = i.source("scripts/executor.bsh");
// System.out.println("Class:" + val.getClass().getCanonicalName());
// Method m = val.getClass().getMethod("start", null);
// m.invoke(val, null);

请注意,我留下了一些带注释的代码,这些代码还显示我使用反射从 Java 执行脚本类。这就是结果:

Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

关于scripting - 我可以实例化来自另一个 Beanshell 脚本的 beanshell 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14213600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com