JVM上“表达式问题”的解决方案-《Java 下一代: 没有继承性的扩展》笔记

Java 下一代: 没有继承性的扩展,第 1 部分
http://www.ibm.com/developerworks/cn/java/j-jn5/index.html
Java 下一代: 没有继承性的扩展,第 2 部分
http://www.ibm.com/developerworks/cn/java/j-jn6/index.html
Java 下一代: 没有继承性的扩展,第 3 部分
http://www.ibm.com/developerworks/cn/java/j-jn7/index.html

这3篇文章主要是介绍了不同jvm上的派生语言如何解决“表达式问题”

    表达式问题:通过案例定义数据类型,在不重新编译现有代码的情况下,将新的案例添加到数据类型和数据类型的新函数中,同事保留静态类型安全(例如,没有转换)。在面向对象语言中,如果为某种数据类型添加新的方法,需要在这种子类型中添加新方法。在函数式编程语言中,可以很方便的在原有数据类型上添加新的方法。

在clojure示例中,比较详细的介绍了“表达式问题”的解决方案:
    clojure核心功能:一般的数据操作的某些功能可以用在所有的Clojure内置类型上。例如,conj函数将元素添加到任何集合上。每一种数据结构对conj函数的反应不同,但是支持相同的api,“多态性”的经典案例:通过统一接口访问许多类型。

    多态性:java子类型多态性的特定类型多态性,即访问某种类型的实例,就像这个实例是其他类型的实例。    

    clojure/scala/groovy通过defprotocol、implicit转换、metaClass、mixin方式来完成当前类的扩展,在jvm层面是通过组合的方式实现多继承类,而且这些方式能够很容易实现java aop功能

    groovy提供AST方式,通过编译器在compile阶段对添加特殊标识的元素进行处理,自动生成字节码-->类似当年的JDO、当今的lombok,和lombok一样,能够减少代码量,同时执行速度和普通代码一样快

这个问题在javascript中很容易就解决了(prototype),这就是动态语言的魅力。在java8中interface defender method也终于解决了多继承的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值