有沒有辦法用ABCL(擴展另一個類)創建Java類?你能用ABCL寫一個Java類嗎?
5
A
回答
5
可以通過JVM包中的函數直接編寫Java類作爲JVM字節碼,JVM包是ABCL自己的編譯器使用的代碼。從abcl-0.25.0開始,JAVA:JNEW-RUNTIME-CLASS method不支持代碼,允許動態編寫調用Lisp方法執行的Java類。該代碼使用ObjectWeb ASM BCEL中必須存在於JVM類路徑中的類。究竟需要哪種版本的ASM BCEL庫,以及它是否適用於當前的ABCL是未經測試的。 ABCL問題#153追蹤在當代ABCL實施中支持這項工作所需的工作。
但是,如果一個人有一個現有的Java接口,其中一個想用Lisp語言爲基礎的方法,以提供一個實現,這個過程是相當簡單(!和支持)
相關的功能是JAVA:JINTERFACE的實現其使用證明在BankAccount example。
對於定義爲
public interface BankAccount {
public int getBalance();
public void deposit(int amount);
public void withdraw(int amount);
}
以下Lisp代碼的Java接口在當前JVM創建可用Java代理:
(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. 你能在PHP的類之外編寫一個類函數嗎?
- 2. Java - 你能訪問一個在超類的子類中聲明的Enum嗎?
- 3. 你能用Java編程註冊一個ActiveX DLL嗎?
- 4. 你能通過對象引用創建一個類嗎?
- 5. 你能找到一個只有String的可用類嗎?
- 6. 你能得到一個調用類的變量嗎?
- 7. 你能寫301重定向到一個定位點嗎?
- 8. 你可以重寫同一個類中的純虛函數嗎?
- 9. 你能從一個非託管C++類派生一個託管C++類嗎?
- 10. 你能推薦一個輕量級的java portlet軟件嗎?
- 11. 你能推薦一個java portlet軟件嗎?
- 12. 你能刪除一個裝飾器嗎?
- 13. 你能幫我一個聽衆嗎?
- 14. 你能解釋一下這個System.Collections.Generic.KeyNotFoundException嗎?
- 15. 你有一個PHP分析類嗎?
- 16. 你能提示一個數組的項目類型嗎?
- 17. 你知道一個jQuery插件,它有類似的功能嗎?
- 18. 你能同時讀寫javascript數組嗎?
- 19. 你能幫我一個java代碼
- 20. Java中可能會顯示一個分數,因爲人類會寫它(Unicode)嗎?
- 21. 能夠純粹用Spring配置定義一個Java類嗎?
- 22. 你可以一行一行寫一個PHP變量嗎?
- 23. 你能分配一個變量給一個靜態類指針嗎?
- 24. 你使用Java註釋嗎?
- 25. Linode:你能用一個linode有多個實例嗎?
- 26. 你能用一個命令在Geany中編譯和執行Java文件嗎?
- 27. 在Java中,你可以調用一個來自不同類的公共重寫方法嗎?
- 28. 你能比較一個字符串與用戶定義的數據類型嗎?
- 29. 在Java中,你能鏈接兩個類之間的垃圾收集嗎?
- 30. 你能不能幫我寫一個SQL查詢
如果我可能會問,ABCL是什麼? – 2011-01-24 20:10:42