java - 在 Java 中实现新的 InetAddress 类型

标签 java inheritance network-protocols

今天讲的是java的InetAddress类。有 2 个默认实现(如果将 InetAddressImpl 算进去,实际上是 3 个):Inet4Address 用于表示 IPv4 地址,Inet6Address 用于表示 IPv6 地址。

现在有几种隧道协议(protocol)。因为我希望软件是类型安全的,所以我考虑将它们实现为 InetAddress 的子类(例如 InetTeredoAddressInet6to4Address)。最好的解决方案是从 Inet6Address 继承,但因为它是最终的,所以这个选项被删除了。下一个想法是创建 InetAddress 的子类并将每个方法委托(delegate)给它的 Inet6Address pendant:

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

实现协议(protocol)的最佳方式是什么?还是 Helper 类是唯一的解决方案?

提前致谢

佐塔

最佳答案

忘掉它,着手实现一系列 URLConnectionHandlers。

关于java - 在 Java 中实现新的 InetAddress 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19377948/

相关文章:

java - 与 Accumulo 的连接在初始化时挂起

c++ - 在 C++ 中编写通用堆栈类

c# - 为什么一个类可以在C#中实现自己的私有(private)嵌套接口(interface)?

c# - 派生不同类型的封装类

flash - HTTPS 服务的 SWF 文件可以请求非安全的 HTTP 内容吗?

google-analytics - Google Analytics 在标准 API 中使用什么协议(protocol)?

java - Android SQLite 数据库上的 ORMLite groupByRaw 和 groupBy 问题

java - 设计模拟 Visitor 而没有其缺点

networking - ACK 和 SEQ 背后的基本原理?

java - 错误无法找到 Java SE 运行时环境/从头开始