Java 使代码同时为1.7和;1.8兼容吗?

Java 使代码同时为1.7和;1.8兼容吗?,java,compatibility,nashorn,Java,Compatibility,Nashorn,我们希望让用户可以选择使用Java1.7或1.8 我们的应用程序使用一个JavaScript引擎,在1.7版本中是Mozilla Rhino,在1.8版本中是Oracle Nashorn。(是的,他们更换了它并破坏了向后兼容性!) 在我们的JS可调用Java代码中,为了使用Nashorn,我们必须使用1.8类jdk.internal.dynalink.beans.StaticClass 当使用StaticClass时,代码无法在Java 1.7中编译或运行。最简单的解决方案是什么?如果只需要一个

我们希望让用户可以选择使用Java1.7或1.8

我们的应用程序使用一个JavaScript引擎,在1.7版本中是Mozilla Rhino,在1.8版本中是Oracle Nashorn。(是的,他们更换了它并破坏了向后兼容性!)

在我们的JS可调用Java代码中,为了使用Nashorn,我们必须使用1.8类
jdk.internal.dynalink.beans.StaticClass


当使用
StaticClass
时,代码无法在Java 1.7中编译或运行。最简单的解决方案是什么?

如果只需要一个类,请编写与1.7兼容的自己的实现


只要完全限定名是相同的,类加载器就不在乎它在哪里找到它。

注意
*.internal.*
:我刚刚参加了一个会议,Mark Reinhold自己告诉我,从
Java 9
中,它们将不可用(以及
sun.
软件包)。这里可能有一些信息:
jdk/nashorn/internal/objects/NativeJava.java#type(Object,Object)
的javadoc字面意思是:
给定一个java类型的名称,在nashorn中返回一个表示该类型的对象。Nashorn中用于表示Java类型的对象的Java类不是{@link Java.lang.class},而是{@link StaticClass}。
我想当我们决定支持Java 9时,同样的兼容性问题会再次出现。