领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Alex Blewitt 译者 张龙 发布于 2010年7月29日
自从最初的Lambda提案(以及InfoQ的深度分析)发布后,Lambda的状态就发生了翻天覆地的变化:Lambda被纳入到了JDK 7当中。感兴趣的读者可以继续阅读,看看有哪些新东西。
最初的Lambda语法饱受诟病,但实际上,问题的严重性远不止纯粹的语法那么简单(毕竟,语法只不过是个外表而已)。其中一个主要的问题是Java并没有对函数类型提供直接的支持,这给Java类型系统带来了一些问题(函数数组可能引起异常泄漏)。无论能否克服这些问题(或者说在给定的JDK 7延期发布的时间内),Lambda都不会再涉及函数类型了。
我们可以采用适配的方式简化内部类的编写过程。这些类叫做SAM(即Single Abstract Method)类。它代表了Java语言中抽象类与接口的一个重要子集,仅包含一个抽象方法。比如说,Runnable接口的run()方法、Comparator接口的compare()方法等(只包含一个抽象方法的抽象类也是可以的,比如Eclipse的org.eclipse.core.runtime.jobs.Job)。
目前进行中的规范表明下面两种表达方式是等价的:
Collections.sort(list,new Comparator() {
public int compare(Object o1, Object o2) {
return(o1.toString().length() - o2.toString().length());
}
}
// is the same as
Collections.sort(list,
{ Object o1, Object o2 -> o1.toString().length() - o2.toString().length() }
);
不得不说的是,Lambda语法依然处于提案阶段,未来可能会发生变化,但基本想法是在Lambda项目的帮助下,我们可以更加简洁的方式编写内部类,从而抛弃现在所用的匿名类方式。另外,Lambda会保持与内部类一样的表现力,可以从局部堆中获取状态(但堆是否要保持可变的状态依然是人们争论的热门话题)。然而,语言本身的一些变化(比如说可以高效获取final变量)以及类型与方法/异常推断的能力使得Lambda要比相应的匿名类更加简洁。
之所以采取这种方式,一个原因就是可以不必修改现有的类(主要是 java.util包中的集合类)。假如使用了函数类型方式,那么就必须得修改集合类以适应Lambda,或者是在JDK 7中放弃对Lambda的支持。其他程序库可能比较灵活,但整个Java类库并非这么容易修改,这也解释了为什么要采取其他方式。
还可以使用方法引用来代替SAMbda。如下代码所示:
public class Comparisons {
public static int compareLength(Object o1, Object o2) {
return(o1.toString().length() - o2.toString().length());
}
public static int compareHash(Object o1, Object o2) {
return(o1.hashCode() - o2.hashCode());
}
}
// examples
Collections.sort(list,#Comparisons.compareLength);
Collections.sort(list,#Comparisons.compareHash);
#代表方法句柄,类似于java.lang.reflect.Method。然而,与Method不同的是,他们是在编译期(而非运行期)确定的,JVM的JIT可以自动内联方法引用。这么做还具有其他优化效果,比如说针对给定的SAM类型,可以单独创建一个类表示代理的方法句柄而不必在使用时创建新的匿名类。
最后,还是存在一些有争议的问题。目前规范的最初草案禁止使用break和continue,但后来澄清说这么做的目的是为了防止跳出SAMBda而进入到封闭的范围内。另外一个主要的变化是return变成隐式的了,不允许在Lambda内部使用;但替代的关键字yield(不要与Thread.yield()混为一谈)与内部类中的return具有相同的语义。表面上来看,这么做可以实现在方法调用后,使用Lambda触发方法中的return的效果(即所谓的“long return”)。未来在语法上也会有一些变化,可以在Lambda中使用return,这需要使用新的关键字(或是关键字组合,比如long return)。其他相似之处还有使用this引用封闭的SAM实例,使用Outer.this引用封闭类的实例。
虽说使用Lambda替换SAM这个决定不如项目最初的提案那样雄心勃勃,但还是有不少优势的:实现简单、无需修改现有的集合类、能够很快派上用场(不管使用何种方式,只要增加函数类型就需要修改集合类)。未来,还可以使用相同的Lambda语法创建函数引用,但其目标是今后发布的JDK版本。
查看英文原文:SAMbdas in Java
译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
论道WP第三篇专栏,以应用程序栏的使用为中心,包括了软键盘带来的问题、应用程序栏介绍、如何绑定应用程序栏的属性等几个方面的具体话题,为开发者顺利使用应用程序栏开发提供了具体指导。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
1 条回复
关注此讨论 回复