如何在Jython中创建用于Java互操作的数组数组?
解决Jython中创建Java二维数组的问题
这个问题我之前也碰到过,Jython里创建Java多维数组确实不能直接用Array这种不存在的类型,得换个思路来搞:
核心问题原因
你遇到的NameError是因为Jython中没有名为Array的内置类型,Java的数组类型是具体的数组类(比如Object[]对应的类是[Ljava.lang.Object;),不能用一个泛指的Array来指代。
方法一:先获取一维数组类型,再创建外层数组
这是最直观的方式,先创建一个一维数组的实例,通过它获取对应的数组类,再用这个类来定义外层数组的元素类型:
import jarray # 1. 创建一个一维Object数组,获取它的Class类型 one_d_array_template = jarray.zeros(10, Object) one_d_array_type = one_d_array_template.getClass() # 2. 创建外层数组,长度为2,每个元素是一维Object数组 two_d_array = jarray.zeros(2, one_d_array_type) # 3. 给外层数组的每个元素赋值具体的一维数组 two_d_array[0] = jarray.zeros(10, Object) two_d_array[1] = jarray.zeros(15, Object) # 甚至可以是不同长度的一维数组
方法二:直接嵌套创建二维数组
如果想一步到位,可以用jarray.array直接嵌套创建,把多个一维数组作为元素传入:
import jarray # 定义一维数组的类型 one_d_type = jarray.zeros(10, Object).getClass() # 直接创建包含两个一维数组的二维数组 two_d_array = jarray.array( [jarray.zeros(10, Object), jarray.zeros(10, Object)], one_d_type )
验证结果
你可以打印数组的类型来确认这是标准的Java二维数组:
print(type(two_d_array)) # 输出会是类似 <type '[Ljava.lang.Object;'>,这就是Java中Object[][]的类型标识
内容的提问来源于stack exchange,提问作者user482745
相关产品推荐
相关产品推荐

