ABCL(別のクラスを拡張)でJavaクラスを作成する方法はありますか?ABCLでJavaクラスを作成できますか?
5
A
答えて
5
JVMパッケージ内の関数(ABCL独自のコンパイラが使用するコード)を使用して、Javaクラスを直接JVMバイトコードとして書き込むことができます。 abcl-0.25.0から、JAVA:JNEW-RUNTIME-CLASS methodのためのサポートされていないコードがあります。これは、実行のためにLispメソッドを呼び出すJavaクラスを動的に書くことを可能にします。このコードでは、ObjectWeb ASM BCELのクラスを使用します。このクラスは、JVMクラスパスに存在する必要があります。 ASM BCELライブラリーの正確なバージョンが必要であり、現在のABCLと連動するかどうかは検査されません。 ABCLの問題#153は、現代のABCL実装でこれをサポートするのに必要な作業を追跡します。 (!とサポート)
しかし、一つ一つの実装を提供するためのLispベースの方法を使用したい対象の既存のJavaインターフェースを持っている場合、プロセスはかなり簡単である
関連の機能はJAVAです:JINTERFACE-実装その使用はBankAccount exampleに示されています。 Javaインターフェースについて
次のLispコードは、現在のJVMに使用可能なJavaプロキシを作成
public interface BankAccount {
public int getBalance();
public void deposit(int amount);
public void withdraw(int amount);
}
として定義:
(defparameter *bank-account-impl*
(let ((balance 1000))
(jinterface-implementation
"BankAccount"
"getBalance"
(lambda()
balance)
"deposit"
(lambda (amount)
(let ((amount (jobject-lisp-value amount)))
(setf balance (+ balance amount))))
"withdraw"
(lambda (amount)
(let ((amount (jobject-lisp-value amount)))
(setf balance (- balance amount)))))))
、Javaからこの実装への参照を取得するには、いずれかを使用BankMainAccount.javaのコード
...
org.armedbear.lisp.Package defaultPackage
= Packages.findPackage("CL-USER");
Symbol bankAccountImplSymbol
= defaultPackage.findAccessibleSymbol("*BANK-ACCOUNT-IMPL*");
LispObject value = bankAccountImplSymbol.symbolValue();
Object object = ((JavaObject) value).getObject();
BankAccount account = (BankAccount) object;
System.out.println("Initial balance: " + account.getBalance());
account.withdraw(500);
System.out.println("After withdrawing 500: " + account.getBalance());
...
0
This exampleは、ABCLでJavaインターフェイスを実装する方法を示しています。
関連する問題
- 1. C/C++のみからJavaクラスを作成できますか?
- 2. JaxBでJavaクラスを作成
- 3. javaでtimeOutクラスを作成する
- 4. 別のJavaクラスで使用するJavaクラスを作成します。
- 5. Android StudioでJavaクラスを作成できないのはなぜですか?
- 6. PlaceTokenizerクラスを作成できません
- 7. TypeScriptでネストされたクラスを作成できますか?
- 8. リスト<class>をクラス名で作成できますか?
- 9. Javaでアンドロイドで簡単にスレッドを作成できますか?
- 10. public static abstract classをjavaで作成できますか?
- 11. C++プログラムで.javaファイルを作成できますか?
- 12. ページ固有のアンカータグをdocusign(Java)で作成できますか?
- 13. Javaでカスタム演算子を作成できますか?
- 14. Javaでポップアップエラーアラートを作成できますか?
- 15. カテゴリはObjective-Cクラスでのみ作成できますか?
- 16. 継承クラスのstd :: mapを作成できますか?
- 17. 特定のクラスのインスタンスのArrayListを作成できますか?
- 18. クラス自体のデータ型を作成できますか?
- 19. @SuppressWarningsを拡張するJavaアノテーションを作成できますか?
- 20. CSV構造からオンザフライでJavaクラスを作成する
- 21. Javaクラスに署名できますか?
- 22. ABCLのコンパイルとプリミティブ
- 23. クラスを作成中にクラスを作成していますか?
- 24. Java HashMapはデッドロックを作成できますか?
- 25. カスタムjava。*パッケージを作成できますか?
- 26. Python:他のクラスのオブジェクトが可能なクラスを作成できますか?
- 27. Scalaクラスは作成後に変更できますか?
- 28. DTDからJavaクラスを自動生成することはできますか?
- 29. 抽象クラスを作成できませんか?
- 30. どのようにJavaクラスのオブジェクトを作成しますか?
私が聞くことができるのは、ABCLとは何ですか? –
アルマベアコモンLisp。これは、JVM上で動作するCommon Lisp実装です。 – compman
これは私が尋ねたこととまったく同じことではありませんが、私がしたいことをします。 [このURL](http://trac.common-lisp.net/armedbear/wiki/JavaScriptingAPI)には、「Javaインターフェイスの実装」セクションがあります。あなたは(Lispで)Javaインタフェースを実装するJavaオブジェクトを作成できます。 – compman