Java:从 jdk.* 导入安全吗?
Java: Is it safe to import from jdk.*?
用这样的导入编写 Java 程序对我来说安全吗:
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import jdk.nashorn.api.scripting.ClassFilter;
注意:
在我的示例中,我导入了 Nashorn,但它可以是任何其他 jdk 包。
注意:我知道从 java.* 导入是 safe/correct ,从 sun.*[=14 导入是 javax.* 和 unsafe/unsupported =]
我在这里看到一篇好文章:http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
我在 Java 官方文档中找不到任何地方告诉我某种方式
感谢
您应该按照 https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/jdk/nashorn/api/scripting/package-summary.html
中的说明通过 javax.script
使用它们
Package jdk.nashorn.api.scripting Description
This package provides the javax.script
integration, which is the preferred way to use Nashorn. You will ordinarily do this to obtain an instance of a Nashorn script engine:
import javax.script.*;
...
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn");
但要回答你的问题,我会说“可能不会”。唯一官方保证支持的软件包是 java.*
、javax.*
和 org.*
.
由于这些是唯一受支持的包,因此不支持 所有 其他包。
任何新的不受支持的包都不会命名为 sun.*
,因为 Oracle 现在拥有 Java。
很可能有人选择 jdk.*
作为新的不受支持的包前缀,因为 sun.*
不再可用。
也就是说,他们不太可能很快将其删除,除非他们决定将其替换为另一个 Java 脚本引擎,就像他们之前所做的那样。
另一个潜在的问题是您的程序不会 运行 在另一个不包含 Nashorn 的 JDK 上。
jdk.nashorn.api.* 包是特定于 nashorn 脚本引擎的 APIs(而 javax.script 是独立于脚本语言的 API)。如果你在你的代码中使用 nashorn 并且你想要 nashorn 特定的访问(比如从 Java 代码反射访问脚本对象 - 使用 jdk.nashorn.api.scripting.ScriptObjectMirror),那么你可以使用这些 APIs。如果你想让你的 java 代码独立于特定的脚本语言实现,那么你可能想要坚持使用 javax.script.
javanashorn APIs 的文档在这里:https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/
用这样的导入编写 Java 程序对我来说安全吗:
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import jdk.nashorn.api.scripting.ClassFilter;
注意: 在我的示例中,我导入了 Nashorn,但它可以是任何其他 jdk 包。
注意:我知道从 java.* 导入是 safe/correct ,从 sun.*[=14 导入是 javax.* 和 unsafe/unsupported =]
我在这里看到一篇好文章:http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
我在 Java 官方文档中找不到任何地方告诉我某种方式
感谢
您应该按照 https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/jdk/nashorn/api/scripting/package-summary.html
中的说明通过javax.script
使用它们
Package jdk.nashorn.api.scripting Description
This package provides the
javax.script
integration, which is the preferred way to use Nashorn. You will ordinarily do this to obtain an instance of a Nashorn script engine:
import javax.script.*;
...
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn");
但要回答你的问题,我会说“可能不会”。唯一官方保证支持的软件包是 java.*
、javax.*
和 org.*
.
由于这些是唯一受支持的包,因此不支持 所有 其他包。
任何新的不受支持的包都不会命名为 sun.*
,因为 Oracle 现在拥有 Java。
很可能有人选择 jdk.*
作为新的不受支持的包前缀,因为 sun.*
不再可用。
也就是说,他们不太可能很快将其删除,除非他们决定将其替换为另一个 Java 脚本引擎,就像他们之前所做的那样。
另一个潜在的问题是您的程序不会 运行 在另一个不包含 Nashorn 的 JDK 上。
jdk.nashorn.api.* 包是特定于 nashorn 脚本引擎的 APIs(而 javax.script 是独立于脚本语言的 API)。如果你在你的代码中使用 nashorn 并且你想要 nashorn 特定的访问(比如从 Java 代码反射访问脚本对象 - 使用 jdk.nashorn.api.scripting.ScriptObjectMirror),那么你可以使用这些 APIs。如果你想让你的 java 代码独立于特定的脚本语言实现,那么你可能想要坚持使用 javax.script.
javanashorn APIs 的文档在这里:https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/