Jython Java包导入语句

时间:2017-05-15 04:30:17

标签: java python memory-leaks classloader jython

我想将java包“TestPackage”导入jython脚本,

import TestPackage
print TestPackage.SampleClass().getMessage();

我收到以下错误,

ImportError: No module named TestPackage","errorPoint":"","lineNumber":"1","errorPointMessage":"in <module>\nImportError: No module named TestPackage

当我使用from TestPackage import SampleClass时工作正常。如果我执行from <pacakage> import <anyclass>语句一次,那么import <pacakage>可以在没有导入错误的情况下运行。

我尝试设置PySystemState.add_package("TestPackage"),但这会导致内存泄漏。

有没有其他方法可以使用import TestPackage?如何在没有内存泄漏的情况下在jython中使用“import <packagename>”?

1 个答案:

答案 0 :(得分:0)

这是由于Java和Python的不同。

在Java中,您可以导入类,静态导入常量和静态方法。您无法导入包。 import java.util;是编译错误,但import java.util.Collections;import java.util.Collections.*;没问题。 Java包是一种组织一堆类的方法,但并不是一个带有构造函数,方法或常量的类。我喜欢将Java包视为包含属于该包的所有类的zip文件。 Java包只是一个命名空间。

在Python中,您可以导入模块,类和从导入类,函数和常量。但是,Python模块更像是Java类而不是Java包。它不仅仅是类&#34;的&#34; zip文件,而是包含子类的类。 Python模块是具有 init .py的文件夹中的脚本集合,它定义了该模块的类和方法。因此,您可以执行import collections之类的操作。 Python还允许您执行import collections.OrderedDictfrom collections import OrderedDictfrom collections import OrderedDict as OD

我希望这可以解释为什么您无法导入Java包。您必须从该Java包导入一些东西(可能是一个类),以便python创建一个变量。