今天是关于InetAddress
java的类。有 2 个默认实现(如果InetAddressImpl
算上实际是 3 个):Inet4Address
用于表示 IPv4 地址和Inet6Address
用于表示 IPv6 地址。
现在有几种隧道协议。因为我希望软件是类型安全的,所以我考虑将它们实现为InetAddress
(InetTeredoAddress
或Inet6to4Address
例如)的子类。最好的解决方案是继承自,Inet6Address
但因为它是最终的,所以这个选项被放弃了。下一个想法是创建 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 类是唯一的解决方案?
提前致谢
佐塔