首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能用ABCL写Java类吗?

你能用ABCL写Java类吗?
EN

Stack Overflow用户
提问于 2011-01-25 03:01:33
回答 2查看 1.2K关注 0票数 5

有没有办法用ABCL (扩展另一个类)创建一个Java类?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-26 18:13:28

可以通过JVM包中的函数直接编写Java类作为JVM字节码,这是ABCL自己的编译器使用的代码。从abcl-0.25.0开始,存在不支持JAVA:JNEW-RUNTIME-CLASS method的代码,该代码允许用户动态编写调用Lisp方法执行的Java类。代码使用来自JVM类路径的类,这些类必须出现在ObjectWeb类路径中。需要ASM BCEL库的确切版本,以及它是否与当前的ABCL一起工作还未经过测试。ABCL issue #153跟踪在当代ABCL实现中支持这一点所需的工作。

但是,如果您有一个现有的Java接口,并且希望使用基于Lisp的方法来为其提供实现,那么这个过程就会非常简单(并且受到支持!)

相关函数是JAVA:JINTERFACE-IMPLEMENTATION,在BankAccount example中演示了它的用法。

对于定义如下的Java接口

代码语言:javascript
复制
public interface BankAccount {
  public int getBalance();
  public void deposit(int amount);
  public void withdraw(int amount); 
}

下面的Lisp代码在当前JVM中创建一个可用的Java代理:

代码语言:javascript
复制
 (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中的代码

代码语言:javascript
复制
  ...
  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());
  ... 
票数 5
EN

Stack Overflow用户

发布于 2011-01-25 11:57:04

This example展示了如何在ABCL中实现Java接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4785969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档