JAVA7语言特性投票的结果

上周javapolis举行了一次关于JAVA7中可能支持的语言特性的投票,该投票涉及到十中JAVA7
中可能的语法增强(这里不包括闭包,后面将单独列出).对于每种语法特性你需要回答"Do you
support this language change?",答案可以是"YES","NO","Maybe"三者之一.
下面罗列出这十种语法特性以及投票结果:
1.Property declaration
属性声明可以允许如下的代码:

Java代码
  1. publicclassPerson{
  2. publicpropertyStringforename;
  3. publicpropertyintage;
  4. }

然后就可以免去书写setter与getter方法.
投票结果:
62 YES,76 NO,8 Maybe

2.Property access
属性访问是对上面语法的进一步加强,允许通过"."来访问被property修饰的字段.
Java代码
  1. publicclassPerson{
  2. publicpropertyStringforename;
  3. publicpropertyintage;
  4. }
  5. Personp=newPerson();
  6. p.forename="Stephen";//callssetter
  7. Stringstr=p.forename;//callsgetter

投票结果:
38 YES,99 NO,4 Maybe

个人观点:由于现在IDE的功能足够强悍,自动生成setter与getter的功能很易用.自动补全
的功能也很完美,所以我觉得上面两个语法糖并没有存在的必要.



3.Improve generics
这个是对目前泛型产生的一些比较"诡异"的语法进行适当的修正.
譬如下面一些看似合理的代码但目前编译通不过:
Java代码
  1. //thisdoesn'tcompiletoday-couldbemadeto
  2. publicclassMyClass{
  3. publicvoidprocess(List<String>list){...}
  4. publicvoidprocess(List<Integer>list){...}
  5. }
  6. //thisdoesn'tcompiletoday-couldbemadeto
  7. if(listinstanceofList<String>{...}

可以参看这篇帖子:http://www.iteye.com/topic/110189
投票结果:
112 YES,11 NO,4 Maybe

个人观点:由于目前JAVA的泛型究其本质,只是编译器做的一个"语法糖"而已.
所以有很多不尽人意的地方,而且由于泛型的引进,JAVA一些本来很优雅的语法也起了
"诡异"的改变,有兴趣的可以看看<JAVA 语言规范>第三版中关于继承以及方法重载.
可以看到本来在JAVA里面很清晰的两个概念,因为泛型的引进一些细节方面变得很诡异了
(至少我是这么认为).所以,如果有可能,真希望JAVA能像C#一样在虚拟机层次支持泛型,
这样目前的很多问题就可以迎刃而解了.


4.Access List and Map using []
通过"[]"来访问List与Map,如下:
Java代码
  1. List<String>list=...
  2. Stringfirst=list[0];
  3. Map<String,Integer>map=...
  4. Integervalue=map["Key"];

投票结果:
78 YES,46 NO,13 Maybe


个人观点:我比较反感这种"局部特殊化"的语法特性,与其将List,Map特殊化,还不如
直接在JAVA中允许重载运算符来的爽快.



5,6.Extension methods and chaining
基本上就是说允许在已有的类中添加方法,也是个"语法糖";另外允许void方法也能使用
方法链的方式.如下:
Java代码
  1. //currentcode
  2. List<String>list=...
  3. Utils.sort(Utils.filter(list,param));
  4. //withthelanguagechange
  5. list.filter(param).sort();

投票结果:
20 YES,63 NO,7 Maybe

个人观点:真看不出除了把JAVA语法弄复杂外还有什么好处...


7.String switch
让switch语句支持String

投票结果:
137 YES,17 NO,10 Maybe
个人观点:既然String已经很特殊了,不妨让它更特殊点...长得更像基本类型些

8.Typedef
类似于C语言中的typedef
Java代码
  1. importjava.util.Map<String,Integer>asCodeValueMap;

投票结果:
17 YES,94 NO,3 Maybe

个人观点:无语...

9.Multi-catch
让catch语句可以批量捕获异常,如下:
Java代码
  1. try{
  2. }catch(IOException|SQLExceptionex){
  3. }

投票结果:
136 YES,17 NO,7 Maybe

个人观点:我喜欢^_^...

10.Null-handling
允许链式方法调用中不抛出NullException,如下:
Java代码
  1. //currentcode
  2. Stringresult=a.b.c;//canthrowNPE
  3. //withlanguagechange
  4. Stringresult=a?.b?.c;//can'tthrowNPE

投票结果:
19 YES,26 NO,3 Maybe

个人观点:Maybe? Maybe No...


另外,javapolis上还有一个专门针对闭包("Closure")的投票,与上面不同的是.这个投票
的选项是:
* No change (no closures)
* Simpler inner classes, and specific new statements (CICE + ARM)
* Full closures, with library control statements (BGGA/FCM+JCA)
投票结果是:
19 No change,30 CICE,24 BGGA/FCM+JCA

个人观点:说实话,我不太懂Closure,虽然看过一些相关资料(八卦).不过由于
JAVA泛型的缘故,从直觉上我选BGGA/FCM+JCA:-)



呵呵,对于这些可能在JAVA7中出现的语法改变,你有什么看法呢?

ps:另外我觉得如果能在JAVA中实现类似C++中的const关键词可以带来不少方便

你可能感兴趣的:(java7)