Guardando allo Rhino to Nashorn migration guide, vedo diversi modi possibili.
Se non si utilizza lo script di compatibilità Rhino, questo lo farebbe:
var usingNashorn = typeof importClass !== "function";
... dal importClass
è definito per Rhino ma non per Nashorn (a meno che non si include lo script di compatibilità).
Io penso Java.type
è Nashorn-specifici, in modo da:
var usingNashorn = typeof Java !== "undefined" && Java && typeof Java.type === "function";
Si potrebbe verificare per il confezionamento delle eccezioni:
var usingNashorn;
try {
// Anything that will throw an NPE from the Java layer
java.lang.System.loadLibrary(null);
} catch (e) {
// false!
usingNashorn = e instanceof java.lang.NullPointerException;
}
... dal momento che la guida alla migrazione dice che sarà true
per Nashorn ma false
per Rhino. Implica il lancio di un'eccezione, che è sfortunata.
fonte
2016-06-09 07:01:03
Interessante. Perché hai bisogno del controllo? –
Se stai chiedendo di rhino vs nashorn, non stai solo chiedendo di JDK SE 8 vs> 8? –
@JohnGreen: * "... su JDK SE 8 vs> 8?" * Nashorn è stato aggiunto in JDK8 (non> 8). Ed è [ancora possibile eseguire Rhino in JDK8] (https://wiki.openjdk.java.net/display/Nashorn/Using+Rhino+JSR-223+engine+with+JDK8) (ma devi aggiungere un barattolo e farlo apposta). –