#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
Ну собственно ты сам и ответил на свой вопрос. Переопределить метод нельзя, базовую реализацию тоже оставить не получится, не нарушив принципов ООП (что собственно компилятор тебе сделать и не дает). Так-же это можно было увидеть, прочитав документацию. Адаптер? А почему нет? В данном случае - достаточно хорошее решение.
Комментариев нет:
Отправить комментарий