java 闭包 回调_c语言和java如何实现闭包?

我想说 Java 的「闭包」很蛋疼... 被闭包引用的「域外」变量只能是 final 的,而且可读性很差,引用 guava的一个例子,自己比较下:

「二比青年版」:

Multiset lengths = HashMultiset.create(

FluentIterable.from(strings)

.filter(new Predicate() {

public boolean apply(String string) {

return CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string);

}

})

.transform(new Function() {

public Integer apply(String string) {

return string.length();

}

}));

这里 Predicate 和 Function 匿名类就是「闭包」,分别实现了 Predicate 接口和 Function 接口。看看这一坨代码... Java 中慎用这种「编码模式」!

「普通青年版」:

Multiset lengths = HashMultiset.create();

for (String string : strings) {

if (CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string)) {

lengths.add(string.length());

}

}

短平快,可读性好!

「文艺青年版」:

(->> strings

(filter #(.matchesAllOf % CharMatcher/JAVA_UPPER_CASE))

(map #(.length %))

(HashMultiset/create))

当然,对于动态语言来说,太小菜了。

以后 Java 8 普及了,支持 Lambda 表达式,估计会好一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值