阅读更多

23顶
2踩

编程语言

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

2007-12-18 02:41 by 见习编辑 Eastsun 评论(27) 有14894人浏览
上周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.iteye.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
2
评论 共 27 条 请登录后发表评论
7 楼 jefyjiang 2007-12-18 18:46
个人强烈支持7和9,也支持“庄表伟”
6 楼 welcomyou 2007-12-18 18:06
同意1,2,3,7
5 楼 javatar 2007-12-18 17:55
1.Property declaration
这个在C#中产生了很多负面影响,<<C# via CLR>>书中有讨论,在Java中引入的可能性比较小.
4 楼 albert_qhd 2007-12-18 17:46
看看c#,这几年大刀阔斧,连var这样的动态类型都加上了。
现在C#简直就是一个动态语言了
疑惑的一点是:他的兼容性是怎么考虑的?

java真该学学C#的勇猛
3 楼 Eastsun 2007-12-18 17:14
所以觉得语言的向后兼容性对语言的发展是一个累赘~
如果JAVA不用顾及这一点,也许会好很多.
2 楼 庄表伟 2007-12-18 15:30
看来都是些语法糖,不过以java目前的状况,可能也只能够“一再加糖”,无法做出什么实质性的改进~~~
1 楼 tblack19 2007-12-18 15:00
个人观点 比较喜欢 4 7

发表评论

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

相关推荐

  • 1747-UIC PLC电缆驱动.rar

    生成串口.3, 打开AB编程软件,把Always Run As Serviece勾去掉。4,添加通信协议,设置通信端口,更改Error Checking 为CRC 。5,如果通信成功将显示相对应的PLC型号。(如鼠标操作)6,上下载程序。7,程序...

  • Kubernetes笔记(十四)--Serviece

    接下来我们来给大家创建一个NodePort的服务来访问我们前面的Nginx服务:(保存为service-demo.yaml) apiVersion: v1 kind: Service metadata: name: myservice spec: selector: app: myapp type: NodePort ...

  • Axis2 关于 Web Serviece 发布

    关于 Web Serviece 以及 Axis2 技术(修定1.2v) 本人的公司在最近的一个金融项目上用到了AXIS2 1.0版,在Tomcat上部署AXIS2,用来发布Web Services我下载了AXIS2 1.0 的 War发布包 成功的安装了AXIS2并且发布了...

  • 关于 Web Serviece 以及 Axis2 技术(修定1.2v)

    http://www.360doc.com/showweb/0/0/166099.aspx 关于 Web Serviece 以及 Axis2 技术(修定1.2v)关于 Web Serviece 以及 Axis2 技术(修定1.2v) 本人的公司在最近的一个金融项目上用到了AXIS2 1.0版,在Tomcat上...

  • 关于Web Serviece以及Axis2技术(客户端和服务器端实现)

    本篇是继关于Axis2发布Web Service之后的又一随笔,此篇的主要任务是讲述使用Axis2开发客户端和服务器端的具体实现。相信大家在看本篇的时候已经具备了一定的Web Service开发基础,因此我主要是以例子的方式来说明,...

  • ajax 开源项目 DWR & 关于 Web Serviece 以及 Axis2 技术

    ajax开源项目dwr的使用: 利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值 给JavaScript就好像直接本地... 2:在web.xml文件中配置如下信息: dwr-invoker uk.ltd.getahead.dwr.DWRServlet 

  • ajax 开源项目 DWR & 关于 Web Serviece 以及 Axis2 技术

    ajax开源项目dwr的使用: 利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值 给JavaScript就好像直接本地... 2:在web.xml文件中配置如下信息: dwr-invoker uk.ltd.getahead.dwr.DWRServlet 

  • Aixs2开发Web service操作数据库demo

    一句话 apache开源的web serviece重量级组件。 3.下面直接贴例子源码, a.将下列代码生成.class文件(不带package包声明),放到aixs2 WEB-INFO/pojo目录下。 /** * SimpleService.java */ package...

  • 内网渗透篇-信息收集

    c:\backdoor.exe sc \\10.10.10.10 create update binpath= c:\programdata\a.bat 启动服务 sc \\remote_ip start services_name sc \\10.10.10.10 start update 停止服务 sc \\remote_ip stop serviece_name sc \\...

  • Linux服务器部署web项目的步骤和方法

    将web项目部署到服务器,准备工作如下:一、安装配置jdk1、下载Linux版本的jdk。版本为jdk-8u161-linux-x64.tar.gz,拷贝到/usr/common/temp,然后解压:2、配置JAVA_HOME进入到用户所在的目录/home/chen,在.bashrc...

  • 【VUE】vue报错“‘vue-cli-service‘不是内部或外部命令,也不是...”的解决办法

    问题描述 项目执行npm run serve后报错 产生原因 (最大概率原因) 由于在该代码中含有node_module依赖包,再拷贝到其他计算机时,项目路径发生变化,导致找不到vue-cli-service于是报错 (其他出错情况,见下文...

  • 深入分析JavaWeb Item44 -- Struts2开发核心之动作类Action

    "Serviece的edit方法执行成功!" ); } @Override public void del () { System.out.println( "Serviece的del方法执行成功!" ); } @Override public Object find () { System.out.println( ...

  • 6.28 Windows Serviece

    描述: A 软件,已经注册了一个windows服务并启用,现在需要在服务自己的一个类B里增加一个字段,服务的作用是返回一个该类型B的实例 做法 增加字段,替换服务文件,重新注册服务并开启,但是在A软件内的服务类型...

  • springboot创建项目 编写dao serviece 和controller

    11 package com.imooc.dataobject; //import javax.persistence.Table; import lombok.Data; import org.hibernate.annotations.DynamicUpdate;...import javax.persistence.Enti...

  • AngularJs - 依赖注入

    2:serviece 相当于我们new一个对象,我们需要做的事情就是在this上面加上属性和方法。 代码如下: 在html标签上写上ng-app='myApp' angular.module('myApp',[]).controller('myControl' ,['$scope','target'...

  • ubuntu-23.04版本安装VMware tools 遇到的问题(未解决)

    vmware tools 安装完启动报错启动VMware tools 时报错,job for wmware-tools.serviece failed because the control process exited with error code . see systemctl status vmware-tools.service and journalctl -...

  • .NET Serviece安装及 启动报错(The Parameter is Incorrect)参数错误问题处理

    优点: 安装基本不会失败, 而且命令简单 缺点: 名称无法通过安装命令改变(可以通过修改服务代码里的名称改变) 使用管理员身份运行cmd 输入命令 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回车 输入命令 ...

  • web开发数据回显以及修改信息

    首先需要先接收一下前端请求的json格式的数据,...数据回显的逻辑非常简单,利用前端请求来的参数,调用serviece,再调用mapper层查询对应id的数据即可,在利用emp员工类来保存,将这个json格式的数据直接响应回前端。

  • springboot创建项目 编写dao serviece 和controller 持久层用mybatis

    11 刷新一下pom 万一没有引入进去 jpa和mybatis选择哪个? 1.看领导要求 2.都会最好 多学点是没错的 ......

  • oracle-dm-dmhs部署实施

    1.前期准备工作 1.1 环境说明: 192.168.56.5 oracle端 192.168.56.9 dm8端 1.1.1 关闭selinux以及防火墙 systemctl start firewalld.service#启动firewall systemctl stop firewalld.service#...Serviece stop ipta

Global site tag (gtag.js) - Google Analytics