私は、javax.script。*パッケージを実際に大量に使用するプロジェクトに取り組んでいます。 Invocable.getInterfaceを使用してJavaインターフェイスを実装するJavaScriptオブジェクトを作成するのと同じように、抽象Javaクラスを拡張するJavaScriptオブジェクトを作成したいという状況があります。これは可能ですか?そしてもしそうなら、あなたはどうやってそれをしますか?JavaScriptから抽象Javaクラスを拡張できますか?
答えて
実行時にバイトコードを生成するルート(以下のようにBCELを使用)を実行したい場合を除いて、いいえ。 proxy classesを使用してインターフェイスで行うことはできますが、抽象クラスには同等のものはありません。
あなたが本当にBCELを試してみたい場合は、あなたの最善の戦略は、これを行うことです。
- は、すべての抽象クラスとデリゲートを拡張する新しいクラスのバイトコードの
byte[]
を生成するためにBCELを使用する方法を書きますJavaScriptへの抽象メソッド。 - 抽象クラスをラッパーに関連付ける命名規則を定義します。
foo.MyAbstractClass
はfoo.MyAbstractClassDynamicLangWrapper
に対応します。 - ロールクラスのバイトを命名規則ことを認識すると、生成するfindClassを実装し、
- defineClassがあなたのスクリプト言語は、スクリプト内のクラス名を解決するために、カスタムクラスローダを使用していることを確認してください呼び出します
ClassLoader
。私はRhinoでsetApplicationClassLoaderを使用していると思いますが、わかりません。
はい、可能です。以前のポスターは間違っています。 documentation for JavaAdapterを参照してください。
残念ながら、私は、基礎となるRhinoオブジェクトをすべて公開しないjavax.script名前空間に組み込みのものを使用しています。私の質問はその状況に特有のものでしたが、これはまだまだ有用な答えです。 –
実際には、これはJavaScript側で公開されており、javax.scriptでも動作するはずです –
重要な注意:JavaAdapterの「ドキュメント」はジョークです。リンクされたページに段落があり、ネット周辺のいくつかのサイトが生成されていますJavaDocは文字通り解説は全くありません。 :( また、マイケルが指摘するように、あなたは*できます*あなたのJavascriptコードでは、新しいJavaAdapter(MyJavaClass、{myOverloadedFunc:function(a、b){return a + b; }) '、' Context.jsToJava'を使って 'MyJavaClass'にキャストできます(実際には* docsを持っています) – Coderer
- 1. 非抽象クラスをJavaで拡張(継承)できますか?
- 2. Java抽象メソッド拡張クラス
- 3. 1つの抽象クラスが別の抽象クラスを拡張して機能を拡張できますか?
- 4. Javaのジェネリック、ジェネリック拡張と抽象クラス
- 5. オブジェクトは抽象クラスをスカラで拡張できますか?
- 6. 抽象クラスから拡張クラスを作成するには?
- 7. スカラ拡張パラメータ付き抽象クラス
- 8. 抽象クラスの拡張クラスとDAO
- 9. 抽象クラスからの配列の拡張クラスからメソッドを呼び出す
- 10. 抽象クラスの問題を拡張する - javascript
- 11. モック拡張抽象クラスの一部
- 12. Javaの抽象的/拡張問題
- 13. インタフェース/抽象メソッドの戻り型としてのJava拡張クラス
- 14. 抽象クラスから継承するJava
- 15. Javaはクラス抽象クラスですか?
- 16. Java抽象クラス、抽象コンストラクタ
- 17. 別のクラスを拡張するテスト抽象クラス
- 18. スカラ抽象クラスからJavaへ
- 19. 抽象関数、パラメータ型はクラスを拡張します
- 20. Android - アクティビティまたはTabActivityを拡張する抽象クラス
- 21. 抽象クラスでJava
- 22. 抽象クラスの拡張の間で変数を共有する
- 23. Java抽象クラス
- 24. TypeScriptの抽象クラスの拡張匿名クラスを作成
- 25. 複数の抽象クラスを拡張することは可能ですか?
- 26. .NET私は、次の抽象クラスを持つ抽象クラスから
- 27. ベンダーモデル抽象クラスをエンティティに拡張する方法
- 28. java抽象メソッドの抽象クラス
- 29. 拡張メソッドを持つクラスへのインターフェイスを抽象化
- 30. Javaで、Kotlin委任クラスを拡張できますか?
これは厄介なようです。私は別の解決策を思いつくと思います。 –