当前位置: 首页 > 知识库问答 >
问题:

在Nashorn中用参数扩展抽象SAM类

栾越
2023-03-14

我试图使用Javascript函数扩展Java中的抽象类。例如,test/A.java:

package test;

public class A {
    public A(String s) {}

    public abstract void go(Object a);
}

和<代码>测试。js:

var myA = new Packages.test.A(function f(a) { print('Calling with '+a); }, 'hello');

计算上述行会导致错误无法使用构造函数测试创建新对象。A带有传递的参数;它们与它的任何方法签名都不匹配,但文档似乎表明该方法是实例化子类的有效方法:

如果抽象类有一个抽象方法(SAM类型),那么您可以传递实现该方法的函数,而不是将JavaScript对象传递给构造函数。以下示例显示了如何在使用SAM类型时简化语法:

var task = new TimerTask(function() { print("Hello World!") });

无论选择哪种语法,如果需要使用参数调用构造函数,可以在实现对象或函数之后指定参数。


共有1个答案

姜宏放
2023-03-14

函数参数排在最后,而不是第一。留档错误,需要修复;我为此提出了一个问题。谢谢你指出这一点。

var myA=new Packages.test.A('hello',函数f(a){print('使用'); });

应该有效。

 类似资料:
  • 我正在用Java构建一个库管理应用程序。 我有一个名为 的抽象类。它有一个称为 的抽象方法。 有一个名为< code>Newspaper的子类,它当然实现了< code>equals,其签名与< code>equals在< code>Material中的签名完全相同: Java无法解析< code > elementoacomparer 的任何方法。它们都存在于< code >报纸中,该报纸确实扩

  • 本文向大家介绍C#扩展抽象基类,包括了C#扩展抽象基类的使用技巧和注意事项,需要的朋友参考一下 示例 与接口(可以描述为实现合同)不同,抽象类充当扩展的合同。 抽象类无法实例化,必须对其进行扩展,然后可以实例化生成的类(或派生类)。 抽象类用于提供通用实现 上面的示例显示了实现Car的任何扩展类如何自动接收HonkHorn方法。这意味着任何开发新汽车的开发人员都无需担心它将如何鸣笛。

  • 类和的行为有何不同?我为什么要选择其中一个? (目前,TypeScript手册和语言规范不包括抽象类。)

  • 我试图使用graal nashorn interop来编写与Java交互的NodeJ。我从。但我不能延长课程。javascript代码是 我的错误是这似乎指向了我所引用的java代码以及javascript运行位置的类加载器问题(即两个不同的类加载器)。在使用graal/nodejs时,有没有办法做到这一点?

  • 问题内容: 我之前了解到抽象类可以扩展具体类。尽管我没从JAVA设计师那里看到原因,但是没关系。我还了解到,扩展具体类的抽象类可以使重写的方法抽象。为什么?您可以提供有用的用例吗?我正在尝试学习设计模式,我不想错过任何东西。 这是示例: 问题答案: 如果我有一组想要默认实现的类(以便它们可以从扩展),并且想要强制提供自己的实现(在这种情况下使其抽象为子类会强制执行此操作。) 当然,此示例中的另一种

  • 我不熟悉泛型。我有一个抽象类(1)和一个抽象方法。我有另一个抽象类(2)和一些抽象方法,我希望在一些DTO(3,4)中共享这些抽象方法。我想要一个(1)的具体扩展来处理任何扩展(2)的东西。 1. 扩展StagingError的两个类:3.