今天我们要讨论Java的InetAddress类。它有两个默认实现(实际上是三个,如果考虑InetAddressImpl):Inet4Address用于表示IPv4地址,Inet6Address用于表示IPv6地址。
现在有几种隧道协议。因为我希望软件具有类型安全性,所以考虑将它们实现为InetAddress的子类(例如InetTeredoAddress或Inet6to4Address)。最好的解决方案是继承Inet6Address,但由于它是final,因此该选项被舍弃了。下一个想法是创建InetAddress的子类,并将每个方法委托给其对应的Inet6Address方法:
什么是最好的实现协议的方法?或者Helper类是唯一的解决方案吗?
谢谢提前。
Zota
现在有几种隧道协议。因为我希望软件具有类型安全性,所以考虑将它们实现为InetAddress的子类(例如InetTeredoAddress或Inet6to4Address)。最好的解决方案是继承Inet6Address,但由于它是final,因此该选项被舍弃了。下一个想法是创建InetAddress的子类,并将每个方法委托给其对应的Inet6Address方法:
class InetTeredoAddress
extends InetAddress {
protected Inet6Address address;
@Override
public boolean isMulticastAddress() {
return address.isMulticastAddress();
}
@Override
public boolean isAnyLocalAddress() {
return address.isAnyLocalAddress();
}
...
}
这次,再次失败的原因是它的构造函数只在java.net.*中可见。 只是为了好玩,我尝试创建一个名为java.net
的包,并将所有类放在其中。 这样我能够编译,但是当启动程序时(惊讶吧),发生了以下错误
org.testng.TestNGException: java.lang.SecurityException: Prohibited package name: java.net
什么是最好的实现协议的方法?或者Helper类是唯一的解决方案吗?
谢谢提前。
Zota
2002:1010:1010::
,其中1010:1010是16.16.16.16的十六进制表示,即IPv4地址。因此,我可以定义“真实”地址,只因为我正在使用隧道协议的某些部分 :) - ZotastasInet6Address
,可以定义一个函数将其映射到Inet4Address
。你不应该创建一个类,而是应该创建一个方法static Inet4Address getTunnelledAddress(Inet6Address)
。 - Raedwald