【发布时间】:2014-01-25 21:08:44
【问题描述】:
我正在尝试在 JavaScript 中扩展一个具体的 Java 类(来自 javafx 库的 TableCell),然后在超类上调用一个方法。我用 Rhino 引擎做这个没有问题,但它在 Nashorn 上失败了。我的代码是:
var Cell = Java.extend(fx.TableCell);
var cell = new Cell() {
updateItem: function (item, isEmpty) {
if(!isEmpty){
cell.super$setText(item);
}
}
};
return cell;
除了上面在August 中添加到nashorn 的“super$setText”语法之外,我还尝试了nashorn 指南中Accessing Methods of a Superclass 中提到的Java.super 调用:
var Cell = Java.extend(fx.TableCell);
var cell = new Cell() {
updateItem: function (item, isEmpty) {
if(!isEmpty){
Java.super(cell).setText(item);
}
}
};
return cell;
在填充相应的表视图时,这些 sn-ps 都会失败。 cell.super$setText throws 'null' has no such function "super$setText" 这让我觉得很奇怪,因为我已经粘贴了该方法的全部内容 - 封闭的 cell 变量应该不会变为 null。 Java.super(cell).setText 抛出“不能调用未定义。”
我还尝试了方便的属性语法cell.text = item,它似乎设置了一个新的 javascript 字段而没有抱怨,但没有在表格视图中显示文本。
我的 JDK8 版本是相当新的
C:\> java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b124)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b66, mixed mode)
我无法辨别这是一个 nashorn 错误,还是我的来源有问题。这是正确的语法吗?我还想知道setText 不是在TableCell 上定义的,而是它的 超类之一是否重要。 nashorn 是否只能向上遍历层次结构?
【问题讨论】:
-
我应该注意,
fx.TableCell被定义为fx.TableCell = Packages.javafx.scene.control.TableCell;
标签: java javascript inheritance nashorn