您的位置: 新闻频道 Java新闻

原创新闻 javapolis举行的关于JAVA7语言特性投票的结果

2007-12-18 by 资深记者 Eastsun
评论(23) 有4013人浏览 java7
上周javapolis举行了一次关于JAVA7中可能支持的语言特性的投票,该投票涉及到十中JAVA7
中可能的语法增强(这里不包括闭包,后面将单独列出).对于每种语法特性你需要回答"Do you
support this language change?",答案可以是"YES","NO","Maybe"三者之一.
下面罗列出这十种语法特性以及投票结果:
1.Property declaration
属性声明可以允许如下的代码:
public class Person {
 public property String forename;
 public property int age;
}

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

2.Property access
属性访问是对上面语法的进一步加强,允许通过"."来访问被property修饰的字段.
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
这个是对目前泛型产生的一些比较"诡异"的语法进行适当的修正.
譬如下面一些看似合理的代码但目前编译通不过:
// 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,如下:
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方法也能使用
方法链的方式.如下:
// 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
import java.util.Map<String, Integer> as CodeValueMap;

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

个人观点:无语...

9.Multi-catch
让catch语句可以批量捕获异常,如下:
try {
} catch (IOException | SQLException ex) {
}

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

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

10.Null-handling
允许链式方法调用中不抛出NullException,如下:
// 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关键词可以带来不少方便

来自:http://www.javapolis.com

评论 共 23 条 发表评论

kongxx 2008-05-08 11:25
这是Java么,Java下个版本应该改名叫"ALL"
astroQi 2008-01-16 10:04
asdfasdfasf
aninfeel 2008-01-15 09:36
有一个怪胎语言诞生了。最反感那个访问容器类用[]的,不过批量catch好像也没必要,catch之后根本分不出哪个是哪个,与其用if在里面判断还不如多写几个catch。
docong 2008-01-11 16:17
看了 thinking in Java 4 ,对Java泛型的感觉就两个字——混乱,根本没有C++泛型的逻辑性。
ken1984 2008-01-10 17:03
java本身很不错,问题是那些什么乱七八糟的开源框架把整个JAVA界的人都搞傻了,成天只知道这框架那框架,变的越来越像一个搬运工,什么东西都搬来弄去,然后美其名曰框架设计师~真不知道那些人的脑袋还有什么用处?不用动脑袋就可以建造一栋高楼的时代到来了!!!
mooniscrazy 2008-01-10 06:19
什么语法糖都去掉,那干脆大家用汇编好了。
语言是给人用的。有用的东西就该加。
还缺少delegate.这是c#的重要特性。java仍然还不行。
rockjava 2007-12-21 17:48
期待“闭包”
syq689 2007-12-20 21:43
呵呵,我是一个java入门者,对于上面所谈到的改变,后面的几个我不太懂,前面的大多同意楼主的意见,只是对批量抛出Exception有点个人的看法,在以前就有很多人对抛出如此种类繁多的exception很有意见,认为没什么必要,但我个人觉得却是对程序调试很帮助,不知现在的批量抛出后,还可以分清抛的是什么种类的Exception么?如果是,那做这样的改变就很有必要,如果不是,就等于凭空抹去了原来的exception类型,这样做它优点何在呢?另:我赞同nullException在链式调用时可以抛出,这样可以知道那个环节是空值。
所言或许多谬误,还请各位大侠指正
simohayha 2007-12-20 18:17
添这么多特性干吗,做成一个平台多好,想要什么特性,从本平台的其他的语言中那不就行了...
Eastsun 2007-12-19 15:36
我认为就JAVA语言本身,不需要再加入太多的特性.
因为太多的特性只会导致语言变得越来越复杂,C++就是如此.
目前C#好像也变得复杂起来了.

我想很多人喜欢JAVA是被JAVA语法的优雅性吸引的:简单,又足够强大.
如果有一天JAVA变得跟C++一样复杂了,那还不如直接用C++算了.

另一方面,可以在基于JAVA平台(JVM)上创造出其它类型的语言,事实现在基于JVM的语言已经很多了.这样,你喜欢闭包,好吧,就去用Groovy吧.

对于JAVA语言,唯一迫切需要增强的语法就是泛型: 这个东东把JAVA语言的优雅性全给破坏了.这个增强就涉及到JVM的修改了.
另一方面,应该允许JAVA有轻微向后不兼容(这个估计很难),这样才能够把那些已经证明是缺陷的语法或API进行舍弃或修正.

这里有一篇blogShould 'Java' stay 'Java'?,我比较认可作者的观点.
cosina 2007-12-19 11:28
4 7 9 感觉必要 有利可图

1 2 3 只会在方便开发者同时 带来更多的负面影响

JAVA 更多的时应该在虚拟机级别上的发展 而不是编译级别
bookong 2007-12-19 11:07
支持
9.Multi-catch
10.Null-handling
allenBen 2007-12-19 10:22
个人感觉这些都无关紧要,有没有都没太大关系,倒是来点动态语法啊,用javassist、cglib、asm……太麻烦了,来点直观的语法
JavaFX可以为什么不可以直接在Java代码中来点呢让Java 也动起来
freej 2007-12-19 10:20
只觉得3、7、9还有些用处

3:这个Java泛型不太完善,真该好好梳理一下了,包括LZ说的虚拟机级别的支持

7:String很多时候很像基本类型,但实质上它就是一个基本类型的包装类,我前一阵写了点儿东西(http://www.blogjava.net/freej/articles/167923.html)

9:Multi-catch在没有不同类别不同处理的情况下或许有些用处


我对闭包不太了解,不敢妄加评论
lordhong 2007-12-18 22:46
倒不如直接使用GROOVY, 什么语法糖都有了, 还很RUBY-LIKE, 搞这些投票烦不烦啊, 没实质性的突破.

发表评论

您还没有登录,请登录后发表评论

相关讨论

相关博客

推荐圈子

D语言
成员: 293
访问: 93435