如何将Java类转换为其子类(SocketAddress和InetSocketAddress)

4

我正在尝试获取套接字连接的IP地址并以字符串形式表示。

我正在使用一个框架,该框架返回接收消息的SocketAddress。如何将其转换为InetSocketAddressInetAddress


欢迎来到 Stack Overflow。最有用并最终解决您问题的答案应标记为已接受。使用投票计数器下方的勾选框完成此操作。 - Bozho
3个回答

7
如果您确定对象是一个 InetSocketAddress,那么只需将其转换为相应类型即可:
SocketAddress sockAddr = ...
InetSocketAddress inetAddr = (InetSocketAddress)sockAddr;

您可以在inetAddr上调用getAddress()方法,以获取与其关联的InetAddress对象。


1
谢谢,我更多地是 PHP 开发人员,对 Java 还很新,所以整个转换过程对我来说都是新的。非常感谢。 - vasion

4
你可以尝试将其转换。在这种情况下,这是向下转型
InetSocketAddress isa = (InetSocketAddress) socketAddress;

然而,如果类不是你所期望的,这可能会抛出ClassCastException异常。可以通过instanceof运算符对此进行检查:
if (socketAddress instanceof InetSocketAddress) {
    InetSocketAddress isa = (InetSocketAddress) socketAddress;
    // invoke methods on "isa". This is now safe - no risk of exceptions
}

可以对其他SocketAddress子类执行相同的检查。


1

实际上,SocketAddress 是一个抽象类,因此您会收到它的一些子类。您尝试将返回的 SocketAddress 强制转换为 InetSocketAddress 了吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接