首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java实例方法

Java实例方法
EN

Stack Overflow用户
提问于 2017-10-16 21:38:59
回答 1查看 175关注 0票数 1

我想试试Nashorn脚本功能。一切正常,我似乎能够从我的.js脚本调用静态方法,如下所示:

代码语言:javascript
复制
var fun3 = function() {
    print("Another day!");
    var Go = Java.type('somePack.Go');
    var result = Go.fun1('John Doe');
    print("\n" + result);
}

在我的"Go“java类中:

代码语言:javascript
复制
public static String fun1(String name) {
    System.out.format("Hi there from Java, %s", name);
    return "greetings from java";
}

但是我想做的是使fun1方法非静态,使它成为一个实例方法。

代码语言:javascript
复制
   public String fun1(String name) {
        System.out.format("Hi there from Java, %s", name);
        return "greetings from java";
    }

在我的script.js中,我确实尝试过:

代码语言:javascript
复制
var Go = new Java.type('somePack.Go');

但我知道错误是:

代码语言:javascript
复制
Caused by: <eval>:19 TypeError: function type() { [native code] } is not a constructor function

有什么简单的方法可以实现我想要的目标吗?

谢谢

完整堆栈:

代码语言:javascript
复制
    at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:392)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190)
    at somePack.Go.go(Go.java:35)
    at somePack.Go.main(Go.java:16)
Caused by: <eval>:19 TypeError: function type() { [native code] } is not a constructor function
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:185)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.getBestConstructor(ScriptFunctionData.java:244)
    at jdk.nashorn.internal.runtime.ScriptFunction.findNewMethod(ScriptFunction.java:758)
    at jdk.nashorn.internal.runtime.ScriptObject.lookup(ScriptObject.java:1827)
    at jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(NashornLinker.java:104)
    at jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(NashornLinker.java:98)
    at jdk.internal.dynalink.support.CompositeTypeBasedGuardingDynamicLinker.getGuardedInvocation(CompositeTypeBasedGuardingDynamicLinker.java:176)
    at jdk.internal.dynalink.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:124)
    at jdk.internal.dynalink.support.LinkerServicesImpl.getGuardedInvocation(LinkerServicesImpl.java:154)
    at jdk.internal.dynalink.DynamicLinker.relink(DynamicLinker.java:253)
    at jdk.nashorn.internal.scripts.Script$Recompilation$2$384$\^eval\_.fun3(<eval>:19)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:386)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-17 12:13:32

你应该用

代码语言:javascript
复制
var Go = Java.type('somePack.Go');
var goObject = new Go();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46779508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档