Как использовать java.cast - PullRequest
0 голосов
/ 18 июня 2019

Я считаю, что не хватает примеров того, как использовать множество этих очень полезных функций в https://chaquo.com/chaquopy/doc/current/python.html#java.cast.

Буду признателен за дополнительные примеры, демонстрирующие, как выполнять некоторые задачи, которые я пытался выполнить. Например, объяснение, возможно ли преобразовать двумерные массивы Java в списки, массивы или тензоры Python. И даже просто понимание синтаксиса использования java.cast ().

1 Ответ

4 голосов
/ 18 июня 2019

В Java - и, следовательно, в модуле java, на который вы ссылаетесь - "приведение" фактически не преобразует объект из одного типа времени выполнения в другой. 1 Скорее, оно просто конвертирует выражение от одного статического типа к другому; и это работает только в том случае, если тип времени выполнения объекта уже равен либо этому статическому типу, либо его подтипу, либо null (None).

Вот почему документация java.cast гласит: «Объект должен быть назначен данному классу, или None (представляющий Java null), в противном случае TypeError будет вызван».

Таким образом, вы не можете использовать java.cast для выполнения любой из упомянутых вами задач. Массив Java не является списком Python, не является массивом Python и не является тензором Python, поэтому вы не можете просто «привести» его к единице.

Соответственно, в документации говорится, что «класс должен быть классом, созданным jclass или jarray, или сигнатурой типа JNI для класса или массива». Так что невозможно даже выразить идею «приведение к списку Python».


1. Примечание: в действительности Java имеет два вида «приведения»: в дополнение к одному для объектов, о которых я здесь говорю, есть еще один для числовых примитивов, где (например) ((int) 3.5) равно 3. Этот действительно выполняет преобразование значений, но он применяется только к семи числовым типам byte, short, int, long, char, float и double.

...