Есть ли способ принудительно использовать целочисленный тип с использованием LuaJava? Я пытаюсь в LuaJ 3.0 beta 1 (luaj-jse-3.0-beta1.jar)
создать экземпляр java.awt.Color
. Вы бы не подумали, что это будет такой проблемой, учитывая наличие Java API конструкторов (JavaAPI). Причина, по которой я заинтересован в форсировании целого числа в конструкторе, состоит в том, что доступные конструкторы Color
принимают три и четыре аргумента либо int
, либо float
. Поскольку тип номера Lua равен double
, LuaJ (или LuaJava) вызывает версии конструкторов float
.Принудительно целочисленный тип в luajava
Сначала я подумал, что это не будет проблемой, но, пытаясь использовать его, я заметил, что получаю странствующий Color
. Значения не были переданы должным образом в конструктор, и объект Color
был по существу сломан, без заметной ошибки (он ничего не разбивал, он просто не отображался).
Вот краткий пример:
local j_color = luajava.newInstance("java.awt.Color", r, g, b);
print(j_color);
Если я прохожу r = 1.0
, g = 0.2
, b = 0.2
в этот конструктор, а затем распечатать j_color
, я буду видеть
java.awt.Color[r=0,g=0,b=1]
на выходе. Фактически, я могу использовать все, что хочу, в r
и g
до тех пор, пока b = 0
, без проблем, но в остальном это вызывает боль и страдания.
Мне немного любопытно узнать, столкнулся ли кто-нибудь с этой проблемой. Если это не решится, я свяжусь с PI в проекте LuaJ об этом и отчитаюсь.
В качестве побочного примечания: было бы просто построить решение, с помощью которого я использую пользовательскую Java-функцию, ответственную за создание Color
. Я больше обеспокоен тем, что эта проблема существует, и есть ли какой-либо способ указать, какой конструктор вы хотите использовать, или явно указать LuaJava на использование целых чисел, а не на удвоение.
Update
Я также попытался использовать конструктор четыре-поплавок, и появляется та же самая проблема. Если я передаю одно из следующих значений: , конструктор работает правильно. Все остальное даст результат выше.
Err, вы говорите, что хотите целочисленный тип, но по вашему примеру они уже конвертируются в целые числа, и это то, чего вы не хотите. –
Это не преобразование в целое число, прежде чем оно будет передано конструктору. Выход I печатается из метода toString() «Цвет», который печатает целочисленное представление. Я знаю, что конструктор на основе float вызывается, потому что, если я попытаюсь передать целочисленные значения (диапазон от 0 до 255), я получу InvalidArgumentException, указав, что значения должны быть между 0 и 1. – Nathan
О, так что вы хотите для вызова Color (int, int, int) вместо цвета по умолчанию (float, float, float). –