Вы не делаете ничего плохого.Я использую Jython 2.7 на Java 1.8 и HBase 1.2.4 и сталкиваюсь с тем же поведением.Вот что, по-видимому, происходит: Java поддерживает несколько методов с одним и тем же именем, которые принимают разные наборы параметров, и, таким образом, Jython внутренне вынужден устранять неоднозначность между несколькими методами с одним и тем же именем, которые принимают разные параметры.Массив Byte [], который преобразуется в строку, представляется в виде массива Python или некоторого его подкласса, который имеет метод toString (), который принимает один параметр (self).Объект 'Bytes', являющийся его подклассом, имеет метод Python для array.toString (self) и Java .toString (final [] byte b) и .toString (final [] byte b, int off, int len) методов.
Должно случиться так, что способ создания объекта Bytes приводит к тому, что .toString (self) Python заменяет Java .toString (final [] byte b) в Java, но другой метод все еще работает, потому что Python отсутствуетМетод .toString () с тремя параметрами для замены другого Java .toString ().(См. https://docs.python.org/2.7/library/array.html?highlight=tostring#array.array.tostring)
Решение: Исправленный импорт с несколькими дополнительными строками кода исправляет это.
import org.apache.hadoop.hbase.util.Bytes as BrokenBytes
class Bytes(BrokenBytes):
@staticmethod
def toString( x ): return( BrokenBytes.toString( x, 0, len( x ) ) )