Java 1.9 模块:使用 java 覆盖 java.net.InetAddress 时相同 class 的不同输出
Java 1.9 Module: Different output for same class using java while overwriting java.net.InetAddress
在 getAllByName()
中添加了 SOP,在 java.net.InetAddress
中添加了 isLoopbackAddress()
方法。使用以下命令
编译 InetAddress.java
javac --patch-module java.base=src -d mypatch src/java/net/InetAddress.java
执行以下代码时 getAllByName("localhost")
打印 SOP。但是其他两个没有。
java --patch-module java.base=mypatch CustomInetAddCall..
InetAddress addr[] = InetAddress.getAllByName("localhost"); // prints SOP.
System.out.println([0].isLoopbackAddress()); // Doesn't
System.out.println(addr[0].getHostAddress()); // Doesn't
原因可能是
getAllByName
是在 InetAddress
class 中定义的 API 而
isLoopbackAddress
和 getHostAddress
都有 正在使用的覆盖实现 ,而不是来自 InetAddress.java
class 的实现你已经修补了。
为了将这些调试步骤添加到上述方法中,您可能必须使用覆盖 InetAddress
[=] 的自定义方法实现来修补 Inet4Address
and Inet6Address
classes 32=]实施。
在
编译getAllByName()
中添加了 SOP,在java.net.InetAddress
中添加了isLoopbackAddress()
方法。使用以下命令InetAddress.java
javac --patch-module java.base=src -d mypatch src/java/net/InetAddress.java
执行以下代码时
getAllByName("localhost")
打印 SOP。但是其他两个没有。java --patch-module java.base=mypatch CustomInetAddCall.. InetAddress addr[] = InetAddress.getAllByName("localhost"); // prints SOP. System.out.println([0].isLoopbackAddress()); // Doesn't System.out.println(addr[0].getHostAddress()); // Doesn't
原因可能是
getAllByName
是在InetAddress
class 中定义的 API 而isLoopbackAddress
和getHostAddress
都有 正在使用的覆盖实现 ,而不是来自InetAddress.java
class 的实现你已经修补了。
为了将这些调试步骤添加到上述方法中,您可能必须使用覆盖 InetAddress
[=] 的自定义方法实现来修补 Inet4Address
and Inet6Address
classes 32=]实施。