Как превратить класс Java в один из его подклассов (SocketAddress и InetSocketAddress) - PullRequest
4 голосов
/ 20 марта 2010

Я пытаюсь получить IP-адрес сокетного соединения в виде строки.

Я использую платформу, которая возвращает SocketAddress полученного сообщения. Как я могу преобразовать его в InetSocketAddress или InetAddress?

Ответы [ 3 ]

7 голосов
/ 20 марта 2010

Если вы уверены, что объект является InetSocketAddress, просто приведите его:

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

Затем можно вызвать метод getAddress() для inetAddr, чтобы получить связанный с ним объект InetAddress.

4 голосов
/ 20 марта 2010

Вы можете попробовать навести на него. В этом случае это 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.

1 голос
/ 20 марта 2010

На самом деле SocketAddress является абстрактным классом, поэтому вы получаете некоторый его подкласс Вы пытались разыграть возвращенное значение SocketAddress до InetSocketAddress?

...