Я хочу объявить переменную, которая содержит класс, который реализует определенный интерфейс.В частности, я пытаюсь сохранить SocketChannel
и DatagramChannel
в одном свойстве, чтобы я мог использовать их взаимозаменяемо.Оба эти класса расширяют SelectableChannel
и также реализуют ByteChannel
, и я хочу вызывать методы из обоих.Я не хочу хранить это в двух отдельных переменных, потому что они должны быть одним и тем же объектом.Я хочу передать этот объект в одной переменной конструктору.
Возможно ли это сделать?Если нет, то каковы общие обходные пути, которые все еще поддерживают этот тип модели?Для ясности вот (неправильные) объявления, которые могли бы описать то, что я пытаюсь сделать, были ли они действительными:
private SelectableChannel & ByteChannel byteChannel;
private SelectableChannel implements ByteChannel byteChannel;
private ? extends SelectableChannel implements ByteChannel byteChannel;
Обратите внимание:
IЯ не ищу другие способы управления сетью, которые избегают этой проблемы, или другие способы реализации сети.Этот вопрос касается объявления переменной для хранения подкласса класса, который также реализует определенный интерфейс.Я дал подробности только для того, чтобы вы знали, что я не могу создать новый интерфейс или подкласс, потому что в этом случае все задействованные классы являются частью пакета java.nio
.