Java: расширение от ByteBuffer - PullRequest
2 голосов
/ 13 ноября 2011

Java не позволяет мне расширяться от ByteBuffer, потому что он реализует абстрактные методы, которые я не переопределяю, но эти методы работают для любых создаваемых объектов ByteBuffer, таких как asDoubleBuffer () ...

byte[] bytes = new byte[256];
ByteBuffer buf = ByteBuffer.wrap(bytes);
DoubleBuffer db = buf.asDoubleBuffer();

Тем не менее, если я расширяю новый класс из ByteBuffer, это вынуждает меня реализовать asDoubleBuffer (), даже если суперкласс уже реализует этот метод, очевидно, так как я могу вызывать его просто отлично. Я совершенно не понимаю, что здесь происходит ... Пожалуйста, объясните мне это.

Ответы [ 2 ]

4 голосов
/ 13 ноября 2011

Метод фабрики ByteBuffer возвращает класс, который реализует ByteBuffer.

byte[] bytes = new byte[256];
ByteBuffer buf = ByteBuffer.wrap(bytes);
System.out.println(buf.getClass());

печать

class java.nio.HeapByteBuffer

Использование ByteBuffer - относительно продвинутый инструмент, вам нужно хорошо понять Java, прежде чем пытаться его расширить.


Вы можете увидеть это, посмотрев на код. В моей IDE вы можете найти его, выполнив + для метода.

public static ByteBuffer wrap(byte[] array) {
    return wrap(array, 0, array.length);
}

звонки

public static ByteBuffer wrap(byte[] array,
                                int offset, int length)
{
    try {
        return new HeapByteBuffer(array, offset, length);
    } catch (IllegalArgumentException x) {
        throw new IndexOutOfBoundsException();
    }
}

Кстати: я большой поклонник использования ByteBuffer, однако вам действительно нужно понимать, что вы делаете для его использования. особенно при разборе данных из ByteBuffer. Разработчики с десятилетним опытом работы считают это сложным для использования.

0 голосов
/ 13 ноября 2011

Nevermind. Я вижу, что когда выделяется новый ByteBuffer, он возвращает подкласс, который использует эти абстрактные методы. Созданный объект вообще не является ByteBuffer. Смущает меня. Не уверен, почему они будут использовать эту методологию.

...