Joshua Bloch撰写的有效Java:条款1-静态工厂方法
||
我正在阅读Joshua Bloch的
Effective Java
,对Item1Static Factory Method
有疑问。
报价[Bloch,第7页]
接口不能有静态方法,
因此按照惯例,静态工厂
名为Type的接口的方法
被置于非示例性的等级
命名类型。例如,Java
收藏框架,提供
不可修改的集合,已同步
收藏等。近乎全部
这些实现中的一部分是导出
通过静态工厂方法合而为一
不可实例化的阶级
(java.util.Collections)。班级
返回的对象全部
非公开。
好。当查看源代码时,我看到带有私有构造函数的java.util.Collection
接口和java.util.Collections
类(非实例化类)。而且我看到非实例化类Collections具有所有静态方法,就像Bloch所说的那样。但是我没有看到布洛赫所说的两个阶级之间的联系
接口不能具有静态方法,因此按照约定,名为Type的接口的静态工厂方法将放置在名为Types的不可实例化的类中。
谁能指出我的明显之处?
他说的是什么意思
返回对象的类都是非公共的
这是我获取Java源代码的地方:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Collection.java?av=f
没有找到相关结果
已邀请:
6 个回复
闪票仇门韧
,并且您要创建一个称为
的实现,那么按照惯例,带有实例化方法的工厂应称为
。 返回对象的类都是非公共的 这意味着从工厂方法返回的对象类具有一个私有的或默认的可见性修饰符,如ѭ7中所示,因此,除了它们的工厂方法外,不能通过任何其他方式实例化它们。由于您不能使用inner8ѭ运算符从私有内部对象或将私有类打包到其作用域之外(而不是反射)来构造对象。 例如。:
嘘崇蔡对
的接口,并且想使用静态工厂方法来创建不同类型的列表。您无法在
接口中定义静态工厂方法,因为它是一个接口。因此,您要做的是有一个类,该类返回实现List的类的实例
你不能做这个
由于“ 10”是接口。
峨躬坎抬焚
陷牡彭拈峰
响摔衅幸
是接口,
有一些工厂方法,例如
2)例如,由
返回的List实例是实现
接口的私有类的实例。
亲奋漏
),而不是特定的实现类(例如
),用户看不到它们,因为这会使事情复杂化并增加API的大小。