私はJSでクラスを作成していますが、それは元のJSから関数にアクセスできる必要があります。関数名は0〜500を超える "button_A_NUMBER"なので、私のオプションではちょっと難しいです。私はJavaScriptを使ってWebページ上の単純な変更を行っていたので初めてです。私がここから完全に離れているかどうか確かめてください。Java Nashorn:JSクラスの抽象クラスJS関数に戻りますか?
私はこれを機能の代わりにクラスに変更するまで、大きく働いていた["button_" + interfaceID]()を使っていました。
JSファイル1
function DecodedPacketButton(index) {
var classObject = new DecodedPacket(index, 8, this) {
complete: function(player, args) {
try {
var interfaceID = args[0];
var childID = args[1];
var slot1 = args[2];
var slot2 = args[3];
classObject.callMember("button_" + interfaceID, player,
classObject.index(), interfaceID, childID, slot1, slot2);
} catch (e) {
Logger.error(e);
}
}
};
return classObject;
}
function DecodedPacket121() {
return DecodedPacketButton(0);
}
JSファイル2
DecodedPacketButton.prototype.button_182
= function(player, index, interfaceID, childID, slot1, slot2) { }
Javaクラス
import jdk.nashorn.api.scripting.ScriptObjectMirror;
public abstract class DecodedPacket {
private int index;
private int size;
private ScriptObjectMirror mirror;
public DecodedPacket(int index, int size, ScriptObjectMirror mirror) {
this.index = index;
this.size = size;
this.mirror = mirror;
}
public abstract void complete(Player p, Object... args);
public void callMember(String functionName, Object... args) {
mirror.callMember(functionName, args);
}
public void call(String functionName, Object... args) {
mirror.call(functionName, args);
}
}
私はcallまたはcallMemberが私が探しているものだと思ったが、いずれもそのトリックをしていないようだ。
だから、あなたの名前の数字に基づいてfunctionedを呼び出そうとしていますか?それをしないでください。索引で関数にアクセスする必要が本当に必要な場合は、それらをリストに入れ、索引付けしてリストから呼び出します。 – Carcigenicate