如何使用 java.cast

Aka*_*ph7 1 python java chaquopy

我发现https://chaquo.com/chaquopy/doc/current/python.html#java.cast 中缺少如何使用这些非常有用的功能的示例。

我希望有更多的例子来展示如何执行我一直在努力执行的一些任务。例如解释是否可以将二维 Java 数组转换为 Python 列表、数组或张量。甚至只是了解使用 java.cast() 的语法是什么。

rua*_*akh 5

在 Java 中 - 因此在java您链接到的模块中 - “强制转换”实际上并没有将对象从一种运行时类型转换为另一种。1相反,它只是将表达式从一种静态类型转换为另一种;并且仅当对象的运行时类型已经该静态类型或其子类型或null( None)时才有效。

这就是为什么java.cast文档说“该对象必须可以分配给给定的类,或者None(代表 Java null),否则TypeError将被引发。”

所以你不能java.cast用来做你提到的任何任务。Java 数组不是 Python 列表,也不是 Python 数组,也不是 Python 张量,因此您不能将其“强制转换”为一个。

相关地,文档说“该类必须是由jclassor创建的jarray,或者是类或数组的 JNI 类型签名。” 因此,甚至无法表达“强制转换为 Python 列表”的想法。


1. 注意:Java 实际上有两种“强制转换”:除了我在这里谈论的一种用于对象之外,还有一种用于数字基元,例如(例如)((int) 3.5)3. 那一个确实做的值转换,但它仅适用于七个数字类型byteshortintlongcharfloat,和double

  • 正如文档所说,`cast` 的使用是为了改变从 Python 代码访问的 Java 对象的“表观类型”,因为 Python 没有在每个变量上声明类型。这很少有必要,但您可以在演示应用程序中通过 [搜索“cast”](https://github.com/chaquo/chaquopy/search?q=cast&unscoped_q=cast) 找到一些示例。至于提问者关于二维数组的具体问题,我将在 [他们的另一个问题](/sf/ask/3965572411/) 中解决这个问题。 (3认同)