这是关于java的InetAddress
类。有2个默认实现(如果您计数为InetAddressImpl
,则实际为3):代表IPv4地址的Inet4Address
和代表IPv6地址的Inet6Address
。今天在Java中实现新的InetAddress类型
现在有几个隧道协议。因为我希望软件是类型安全的,所以我考虑将它们实现为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
什么是执行协议的最好方法?或者是助手类唯一的解决方案?
在此先感谢
Zota
“隧道协议”是一种隧道协议,真的是一种不同类型的Internet地址? – Raedwald
那么一般不会有^^,但在某些情况下,您可以将原始IP从另一个中取出。例如6to4:类似于'2002:1010:1010 ::',其中1010:1010是16.16.16.16的十六进制表示,即IPv4地址。所以我可以定义“真实”地址,只是因为我使用了隧道协议的某些部分:) – Zotastas
这是一个'Inet6Address',为此可以定义一个映射到'Inet4Address'的函数。而不是创建一个类,你应该创建一个方法'静态Inet4Address getTunnelledAddress(Inet6Address)'。 – Raedwald