为什么Inet * Address类没有可见的构造函数?

时间:2011-12-12 05:46:31

标签: java

为什么InetAddressInet4AddressInet6Address类没有可见的构造函数?

3 个答案:

答案 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)

Inet4AddressInet6Address的默认构造函数只有包可见,因此InetAddress可以看到它。

InetAddress没有构造函数的原因是因为InetAddressFlyweight pattern,它会公开Factory methods以检索相关InetAddress子类的基于地址提供。