使用以下导入编写Java程序是否安全:
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import jdk.nashorn.api.scripting.ClassFilter;
注意: 在我的示例中,我导入Nashorn,但它可能是任何其他jdk包。
注意:我知道从java。*,javax。*和不安全/不支持从sun导入是安全/正确的。*
我在这里看到一篇好文章:http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
我在Java官方文档中找不到任何方式告诉我这种或那种方式
谢谢
答案 0 :(得分:7)
您应该按照https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/jdk/nashorn/api/scripting/package-summary.html
中的说明通过javax.script
使用它们
包jdk.nashorn.api.scripting描述
此包提供
javax.script
集成,这是使用Nashorn的首选方式。您通常会这样做以获取Nashorn脚本引擎的实例:
import javax.script.*;
...
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn");
但是要回答你的问题,我会说“可能不会”。唯一正式保证支持的软件包是java.*
,javax.*
和org.*
。
由于这些是唯一受支持的软件包,因此不支持所有其他软件包。
任何新的不受支持的软件包都不会被命名为sun.*
,因为Oracle现在拥有Java。
由于jdk.*
不再可用,因此有人可能会选择sun.*
作为新的不受支持的包前缀。
也就是说,他们不太可能很快将其删除,除非他们决定将其替换为另一个Javascript引擎,就像他们之前已经做过的那样。
另一个潜在的问题是你的程序不会在另一个不包含Nashorn的JDK上运行。
答案 1 :(得分:0)
jdk.nashorn.api。*包是nashorn脚本引擎特定的API(而javax.script是独立于脚本语言的API)。如果您在代码中使用nashorn并且您希望使用nashorn特定访问(例如,使用jdk.nashorn.api.scripting.ScriptObjectMirror反射性地从Java代码访问脚本对象),则可以使用这些API。如果你想让你的java代码独立于特定的脚本语言实现,那么你可能想要坚持使用javax.script。
nashorn API的javadoc位于:https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/