Java服务提供_java中的服务提供者框架

As per the book “Effecive java” what does the statement “The class of

the object returned by a static factory method need not even exist at

the time the class containing the method is written.” means in

following paragraph:

解释这句话的意思的好方法是考虑EnumSet类型,它是java.util包中的一个类.

EnumSet是一个没有任何可访问构造函数的抽象类.为了获得EnumSet实例,程序员使用其静态工厂方法之一,例如. EnumSet.of(…).例如:

Set s = EnumSet.of(MyEnum.FIRST_CONSTANT);

of()方法返回的对象没有EnumSet的实现类型.相反,实现类型取决于MyEnum类.如果MyEnum有64个或更少的常量,则()返回的对象的类型是RegularEnumSet.如果MyClass有超过64个常量,则返回的对象类型为JumboEnumSet.但是,返回的对象的实际类型对程序员来说并不重要.他或她所关心的是获得符合EnumSet合同的某种类型的对象.

现在,让我们说,哦,五年后,Java语言架构师决定拥有另一个EnumSet实现类型很重要,比如说,例如,对于具有大量常量(超过1024)的类的缓存枚举实现).他们编写这个类来遵循EnumSet合约并调用它:

final CachedEnumSet extends EnumSet {

:

:

}

尽管在编写EnumSet时CachedEnumSet不存在,但使用静态工厂启用基于合同的实现系统这一事实使Java架构师能够在几年后添加此新实现.

现在,当一个客户端调用EnumSet.of()时,他或她可以获得一个RegularEnumSet对象,一个JumboEnumSet对象或新的CachedEnumSet对象,但他们不关心,因为他们得到的对象仍然是EnumSet的子类型,并且受合同约束.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值