最近又看到这篇文章了,转载过来大家看看,是javapolis举行的关于JAVA7语言特性投票的结果 ,里面有些特性还是蛮有意思的,不过有的的确太无聊了,个人感觉纯粹是添乱。呵呵,大家也来说一下撒。呵呵。看看各自自己的看法。我个人比较喜欢String switch   Multi-catch   Null-handling Access   List and Map using []  四个特性,其他的不是太关心,呵呵。
原文地址在这里:
http://www.javaeye.com/news/598这里是我copy过来的:
上周javapolis举行了一次关于JAVA7中可能支持的语言特性的投票,该投票涉及到十中JAVA7
中可能的语法增强(这里不包括闭包,后面将单独列出).对于每种语法特性你需要回答"Do you
support this language change?",答案可以是"YES","NO","Maybe"三者之一.
下面罗列出这十种语法特性以及投票结果:
1.Property declaration
属性声明可以允许如下的代码:
Java代码 复制代码   1. public class Person {  
   2.  public property String forename;  
   3.  public property int age;  
   4. }  public class Person {
 public property String forename;
 public property int age;
}
然后就可以免去书写setter与getter方法.
投票结果:
62 YES,76 NO,8 Maybe2.Property access
属性访问是对上面语法的进一步加强,允许通过"."来访问被property修饰的字段.
Java代码 复制代码   1. public class Person {  
   2.  public property String forename;  
   3.  public property int age;  
   4. }  
   5. Person p = new Person();  
   6. p.forename = "Stephen";   // calls setter  
   7. String str = p.forename;  // calls getter  public class Person {
 public property String forename;
 public property int age;
}
Person p = new Person();
p.forename = "Stephen";   // calls setter
String str = p.forename;  // calls getter投票结果:
38 YES,99 NO,4 Maybe个人观点:由于现在IDE的功能足够强悍,自动生成setter与getter的功能很易用.自动补全
的功能也很完美,所以我觉得上面两个语法糖并没有存在的必要.
3.Improve generics
这个是对目前泛型产生的一些比较"诡异"的语法进行适当的修正.
譬如下面一些看似合理的代码但目前编译通不过:
Java代码 复制代码   1. // this doesn't compile today - could be made to  
   2. public class MyClass {  
   3.  public void process(List<String> list) {...}  
   4.  public void process(List<Integer> list) {...}  
   5. }  
   6. // this doesn't compile today - could be made to  
   7. if (list instanceof List<String> { ... }  // this doesn't compile today - could be made to
public class MyClass {
 public void process(List<String> list) {...}
 public void process(List<Integer> list) {...}
}
// this doesn't compile today - could be made to
if (list instanceof List<String> { ... }
可以参看这篇帖子:http://www.javaeye.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. String first = list[0];  
   3.   
   4. Map<String, Integer> map = ...  
   5. Integer value = map["Key"];  List<String> list = ...
String first = list[0];Map<String, Integer> map = ...
Integer value = map["Key"];投票结果:
78 YES,46 NO,13 Maybe
个人观点:我比较反感这种"局部特殊化"的语法特性,与其将List,Map特殊化,还不如
直接在JAVA中允许重载运算符来的爽快.
5,6.Extension methods and chaining
基本上就是说允许在已有的类中添加方法,也是个"语法糖";另外允许void方法也能使用
方法链的方式.如下:
Java代码 复制代码   1. // current code  
   2. List<String> list = ...  
   3. Utils.sort(Utils.filter(list, param));  
   4.   
   5. // with the language change  
   6. list.filter(param).sort();  // current code
List<String> list = ...
Utils.sort(Utils.filter(list, param));// with the language change
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. import java.util.Map<String, Integer> as CodeValueMap;  import java.util.Map<String, Integer> as CodeValueMap;
投票结果:
17 YES,94 NO,3 Maybe个人观点:无语...9.Multi-catch
让catch语句可以批量捕获异常,如下:
Java代码 复制代码   1. try {  
   2. } catch (IOException | SQLException ex) {  
   3. }  try {
} catch (IOException | SQLException ex) {
}
投票结果:
136 YES,17 NO,7 Maybe个人观点:我喜欢^_^...10.Null-handling
允许链式方法调用中不抛出NullException,如下:
Java代码 复制代码   1. // current code  
   2. String result = a.b.c;    // can throw NPE  
   3. // with language change  
   4. String result = a?.b?.c;  // can't throw NPE  // current code
String result = a.b.c;    // can throw NPE
// with language change
String result = a?.b?.c;  // can't throw NPE投票结果:
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关键词可以带来不少方便

解决方案 »

  1.   

    谢谢LZ LZ 好人...................................
      

  2.   

    java7都出来了,好呀,要不断的更新才有新的生命里
      

  3.   

    JAVA7 出来了...>>>>>>
    LZ的脚步可真快....
      

  4.   

    其中有些类似C#中语法,比如 1.Property declaration 2.Property access 8.Typedef,个人感觉1、2值得借鉴,既然 C# 当初设计时从 Java 这儿“借鉴”了不少语法和技术,那 Java 取 C# 之精华也没什么可觉得丢人的。
      

  5.   

    7.String switch 
    让switch语句支持String 投票结果: 
    137 YES,17 NO,10 Maybe 
    个人观点:既然String已经很特殊了,不妨让它更特殊点...长得更像基本类型些 9.Multi-catch 
    让catch语句可以批量捕获异常,如下: 
    Java代码 复制代码   1. try {  
      2. } catch (IOException ¦ SQLException ex) {  
      3. }  try { 
    } catch (IOException ¦ SQLException ex) { 

    投票结果: 
    136 YES,17 NO,7 Maybe这两个还真不错, 其他的感觉很没有必要, 真的是在添乱.
      

  6.   

    莫名其妙, 如果单纯为了省去getters和setters, 那么直接把属性声明为public不就可以了? 要property岂不是多此一举? 这个最多也就是编译期的一个辅助罢了, 我觉得实际意义不大。 另外, 增加property那么public或者private怎么去理解?这只能让java更复杂。
      

  7.   

    1,2条感觉能让代码简练一点,增加也无妨。
    3,只能说我不感冒。
    4,现有的访问方式已经可以了。
    5,6有点乱……
    7,这个我也喜欢。
    8,很傻(个人观点)
    9,感觉意义不大,如果我不关心具体的exception的话,直接catch Exception就好了。
    10,还是抛吧。
      

  8.   

    的确我也有这种感觉,直接读取属性的方式有待商榷,如果真要直接读取属性不如弄成Public来得方便,再增加一个关键字,那岂不郁闷,以后多半面试中又会出现,请问 propery和public的异同? o(∩_∩)o...哈哈。
      

  9.   

    呵呵,Java 6还刚开始用呢,7 就出来了
    看来是关注的不够啊,顶...顶...顶。...
      

  10.   

    第一, 对C#不了解, 也没有冲动去了解。 就事论事, 你能告诉我这么做相比public的区别和优势在哪么?
      

  11.   

    稀饭时候 定义个getter setter 
    xxx.p = "" 这种调用代码不用变不稀饭时候 删除某个getter setter 
    xx.p = "" 这种调用代码不用变适用于你是做某个功能模块给人家用的时候 又不是很确定需要需要检查用户输入同事 我觉得这重简化代码有必要 特别是在实体bean里 虽然是ide生成 未免也乱了点
     就知道之前有个朋友c#转java(项目要求的)问我为什么java没这个 我说 public出来不是一样?他很冲动的说 不一样,具体原因没说  不过看了楼主的文章 我觉得存在 有他的道理
    不知道我有没有理解错误
      

  12.   

    这种语法的重点是xxx.p = ""
    这样子 有setter的时候会自动call 没的时候 就按public来用这时主要区别 这种区别的好处就是我上面说的
      

  13.   

    5,6.Extension methods and chaining
    基本上就是说允许在已有的类中添加方法,也是个"语法糖";另外允许void方法也能使用
    方法链的方式.如下:
    Java代码 复制代码 对做swing的有好处(或者类是的)
    swing最多的是
    button.setText("xxxx");
    button.setVisiable(true);
    ...可以写成
    button.setText("xxx").setVisiable(true);当然 能构造更加好的代码
    在其他弱类型的语言了 经常用return this来实现如js中jQuery框架就是遍地都是这种语法 看代码时候按着那条语法链一直看 没啥看疑惑的地方的 挺好的语法