主要变化:
- 支持 JChar 作为返回类型。 为了兼容性,JChar继承自“str”并实现了到“int”的隐式转换。 因此,它通过了合同检查。 但这意味着它在 Python 中不再被视为数字类型,因此 isinstance(c, int) 的计算结果为 False,这与 Java 类型转换规则一致。
- 引入了一个运算符来转换 Java 类型,Type@obj(@ 是用于内积的 Python 运算符;Java 没有)。
- 添加了用于创建 Java 数组的符号。 Type[s1][s2][s3] 用于固定大小的数组,Type[:][:][:] 用于稍后创建的数组。
- @FunctionalInterface 允许您使用 __call__ 从 Python 对象创建 Java 函子。
- 删除了已弃用的 JIterator、使用 JException 作为工厂、get_default_jvm_path 和 jpype.reflect。
- 默认情况下,Java 字符串不会转换为 Python 字符串。
- Python 已弃用“__int__”,因此整数和浮点类型之间的隐式转换将产生 TypeError。
- JException 的使用已被弃用。 要捕获所有异常,或检查对象是否为 Java 异常类型,请使用 java.lang.Throwable。
- Java 异常的级联原因现在反映在 Python 堆栈帧中。
- JString 已被弃用。 要创建 Java 字符串,或检查对象是否属于 Java 字符串类型,请使用 java.lang.String。
- Java 类中的 Repr 方法已更新。
- java.util.List 执行 collections.abc.Sequence 和 collections.abc.MutableSequence 的契约。
- java.util.Collection 执行 collections.abc.Collection 的契约。
- Java 类是私有的,从 Python 扩展时会抛出 TypeError。
- 小心处理 Control-C。 当 Java 处理 Control-C 信号时,以前的版本会崩溃,因为它们会在调用期间终止 Java。 JPype 现在从 Java 返回时会抛出 InterruptedException。 Control-C 不会丢弃当前实现的大型 Java 程序,因为 Java 没有专门的工具来执行此操作。
接下来,创建了修正版本 1.0.1,其中添加了一些更改来解决 Python 3.8.4 版本的问题。 Python 更改了有关“对象”和“类型”使用“__setattr__”的逻辑,防止它被用于修改派生类。 错误检查也由“__setattr__”方法委托,因此某些充分性检查中的异常类型应相应更新。
来源: opennet.ru