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

时间:2010-03-20 17:34:12

标签: java class sockets networking inetaddress

我正在尝试以字符串形式获取套接字连接的IP。

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

3 个答案:

答案 0 :(得分:7)

如果您确定该对象是InetSocketAddress,那么只需将其投射:

SocketAddress sockAddr = ...
InetSocketAddress inetAddr = (InetSocketAddress)sockAddr;

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

答案 1 :(得分:4)

你可以尝试投射它。在这种情况下,这是downcasting

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的其他子类进行相同的检查。

答案 2 :(得分:1)

实际上SocketAddress是一个抽象类,所以你会收到它的一些子类。您是否尝试将退回的SocketAddress投放到InetSocketAddress