#java #ооп
Хочу добавить наследнику ByteArrayOutputStream поддержку интерфейса SeekableByteChannel.
Проблема в методе size(). Для ByteArrayOutputStream он объявлен как
public int size()
А для SeekableByteChannel
long size()
Если оставить базовую реализацию или продублировать свою
public int size() {
return super.size();
}
То получаю две ошибки
Error:(12, 8) java: ByteArrayOutputSeekableStream is not abstract and does not
override abstract method size() in java.nio.channels.SeekableByteChannel
Error:(147, 17) java: size() in ByteArrayOutputSeekableStream cannot override size()
in java.io.ByteArrayOutputStream
return type long is not compatible with int
Если метод переопределить
public long size() {
return super.size();
}
то получаю ошибки
Error:(157, 17) java: size() in ByteArrayOutputSeekableStream cannot override size()
in java.io.ByteArrayOutputStream
return type long is not compatible with int
Error:(37, 16) java: size() in BufferedOutputSeekableStream cannot implement size()
in java.nio.channels.SeekableByteChannel
return type int is not compatible with long
Error:(38, 26) java: incompatible types: possible lossy conversion from long to int
Проблема как-то решается? Или нужно добавлять в класс метод
public SeekableByteChannel getChannel();
и отдавать какой-то адаптер?
Ответы
Ответ 1
Ну собственно ты сам и ответил на свой вопрос. Переопределить метод нельзя, базовую реализацию тоже оставить не получится, не нарушив принципов ООП (что собственно компилятор тебе сделать и не дает). Так-же это можно было увидеть, прочитав документацию. Адаптер? А почему нет? В данном случае - достаточно хорошее решение.
Комментариев нет:
Отправить комментарий