Таким образом, архитекторы Java NIO не создали интерфейс ByteBuffer, а скорее ByteBuffer class, который не является конечный класс, но он не имеет конструкторов с открытым пакетом, и поэтому он не может быть подклассифицирован за пределами его пакета. Phooey.: P
У меня есть программа, которая использует загруженные в память файлы байт-буферов (полученные через FileChannel.map()) в кучке мест, и я пытаюсь отследить неприятную ошибку, когда этот файл остается открытым, существует, по крайней мере, один ByteBuffer, который не выделяется в сборку мусора.
Я хотел бы создать класс InstrumentedByteBuffer, который выглядит как байтовый буфер, но украшает регулярный ByteBuffer (или его подклассы, например MappedByteBuffer), и отслеживает его существование (в том числе новые буферы, созданные duplicate() и slice()) - таким образом я могу сохранить код без изменений, который использует ByteBuffer, мне просто нужно украсить исходный буфер байта.
Есть ли способ сделать это (через отражение или прокси или что-то еще), чтобы обойти частные конструкторы? Мне не нужно отправлять это в конечный продукт, мне просто нужно временно его использовать, чтобы решить эту ошибку.