为什么InetAddress
,Inet4Address
和Inet6Address
类没有可见的构造函数?
答案 0 :(得分:7)
因为它们不是直接实例化的(事实上这是一个有用的模式)。相反,您应该使用API提供的各种“工厂”方法来获取实例。查看文档:
http://docs.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html
特别要注意静态getBy...()
方法。
答案 1 :(得分:7)
因为它是工厂级的。当有少数情况需要创建这样的对象时,使用静态方法返回工厂实例是有意义的。
因此,不是将构造函数重载到您必须记住用于每个给定情境的各种奇怪的参数组合的位置,它只是为每种情况提供一个(希望名称很好)的方法
在这种情况下,您可以使用以下方法之一创建对象:
getLocalHost()
,获取您自己的地址; getByName()
,获得"主要"网站地址;或getAllByName()
,获取地址列表。这不是一个详尽的列表,有关其中的更多信息,请参阅here,请搜索该页面:
Methods in java.net that return InetAddress
答案 2 :(得分:1)
Inet4Address
和Inet6Address
的默认构造函数只有包可见,因此InetAddress
可以看到它。
InetAddress
没有构造函数的原因是因为InetAddress
是Flyweight pattern,它会公开Factory methods以检索相关InetAddress
子类的基于地址提供。