J2SE1.5便于开发的新语言特性:Joshua Bloch的访谈录(5)(完)

看起来真的很好。您乐意跟我们介绍一下静态导入(static import)会给开发者带来什么吗?

 

它让程序员不必在使用类的静态成员时前缀类名。人们确实希望这样,所以他们经常实现所谓的常数接口来达到这个效果:

 

// "Constant Interface" antipattern - do not use!

public interface Physics {

  public static final double AVOGADROS_NUMBER   = 6.02214199e23;

  public static final double BOLTZMANN_CONSTANT = 1.3806503e-23;

  public static final double ELECTRON_MASS      = 9.10938188e-31;

}

 

public class Guacamole implements Physics {

    public static void main(String[] args) {

        double moles = ...;

        double molecules = AVOGADROS_NUMBER * moles;

        ...

    }

}

 

这是一个非常糟糕的做法:接口是用来定义类型的,不是用来定义常量的。Guacamole 使用Physics常数仅仅是一个实现细节,不应该对外开放公共的API。这样做的结果不仅让这个类的使用者糊涂,而且它还做了长期的承诺。即使你准备重写Guacamole 这个类,其中不再用到这些常数,你依然必须implements这个接口。因为这个类的使用者依赖于你的类implements Physics这个事实。

 

静态导入(static import)提供了一个清晰的解决方案。它让程序员使用某个类的静态成员而不用成为它的子类的方法。它和package import的功能很相似,不过他只是导入一个类的静态成员,而package import则是从包中导入一个类。下面是一个例子:

 

import static org.iso.Physics.*;

 

class Guacamole {

    public static void main(String[] args) {

        double molecules = AVOGADROS_NUMBER * moles;

        ...

    }

}

 

注意,无论Physics是一个接口还是一个类,这个程序都可以正常地工作。如果它只是定义常数,那么它就应该定义为一个类而不是一个接口。

 

我懂了。现在您能告诉我关于元数据(metadata)的一些便利吗?

 

这与我们讨论的其它的一些特性不太相同。它同样也可以让开发变得更容易,不过需要工具开发商的支持。

 

现在许多API需要相当数量的样板文件。比如,当你定义一个JAX-RPC Web Service的时候 ,你要提供一个接口和一个实现类:

 

public interface CoffeeOrderIF extends java.rmi.Remote {

    public Coffee [] getPriceList()

        throws java.rmi.RemoteException;

    public String orderCoffee(String name, int quantity)

        throws java.rmi.RemoteException;

}

 

public class CoffeeOrderImpl implements CoffeeOrderIF {

    public Coffee [] getPriceList() {

        ...

    }

    public String orderCoffee(String name, int quantity) {

        ...

   }

}

 

这个例子是直接从我们Web Services Tutorial里面拷贝的。

如果有元数据功能的话,你就不必要手工写所有的这些东西。你只要标记代码让工具知道那些代码是可以远程访问的,工具就会自动生成上面的代码。下面是一个有元数据功能支持的代码的例子:

 

import javax.xml.rpc.*;

 

public class CoffeeOrder {

    @Remote public Coffee [] getPriceList() {

        ...

    }

    @Remote public String orderCoffee(String name, int quantity) {

        ...

    }

}

 

所有的样本文件都没有了!

 

嗯,确实简洁多了。但是您不可能定义所有有用的性质并且构造所有的工具,不是吗?

 

对,JSR-175只是提供了一个框架给其他的开发者,让他们可以定义性质和构造工具。其他一些JSR诸如JSR-181定义了Web Services 的元数据,是定义属性的。我们期望这个领域有更多的发展。

 

向前看,您期望未来的Java语言会有什么新的改变?

 

这个不好说。我现在所有的精力都花在Tiger上面了,没有时间考虑下一个变化是什么。

 

您还想留给我们一些其他什么信息吗?

 

其他最重要的就是,Tiger 是一个以开发者为中心的版本。当James Gosling 和他的团队引入Java语言之后,Java的发展速度就像是一个起飞的火箭一样,原因就在于它触动了开发者的心灵,点燃了他们的热情。这个版本的开发依然是基于这个思想。

我很幸运能有机会最早接触这些语言的新特性,发现用它们工作是一种乐趣。我敢确信其他开发者也会这样。在现有的各种开发语言中,Java本来就是一个非常好用而且富有生产力的语言,而所有的即将到来的新特性又会大大地增强使用它的乐趣,提高使用它进行开发的生产力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常善,方便用户快速上手和理解代码;最后,我会定期更这些源码资源,以适应各平台技术的最发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值