2011-01-26 23 views
5

En la versión sun.org.mozilla de Rhino, JavaAdapter sólo toma las interfaces como primer argumento en lugar de cualquier otro tipo de clase de acuerdo con este mensaje de error:sun.org.mozilla Rhino y se extienden las clases abstractas Java

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorExcep 
tion: JavaAdapter: first arg should be interface Class (<Unknown source>#11) in 
<Unknown source> at line number 11 

¿Hay alguna manera, no importa cuán hacky, para extender una clase abstracta (o una clase normal para ese asunto) a través de Rhino?

Aquí está el código erróneo:

var j = new JavaAdapter(foo.bar.abstractClass, { 
    field : "test", 
    method : function() { 
     print("on enable"); 
    } 
}); 
+0

Ayudaría si publicaras el código que causó ese error y stacktrace. –

+0

agregué el código ofensivo según su sugerencia. –

Respuesta

7

La otra respuesta es correcta para la versión de Sun de Rhino. No queda del todo claro por la redacción de la pregunta si cambiar al original (Mozilla) Rhino es una opción para ti o no.

Específicamente, cuando Sun agregó Rhino a Java, "a few components have been excluded due to footprint and security reasons", y uno de ellos fue JavaAdapter de Mozilla. Sun escribió su propio "JavaAdapter" pero es mucho más pequeño y simple que el de Mozilla, y solo puede usarse para implementar una única interfaz Java. El JavaAdapter original de Mozilla no tiene tal restricción: lo uso para implementar clases abstractas todo el tiempo.

No tiene nada que ver con una vaga diferencia filosófica como "JavaScript no es realmente 'OO' de la misma manera que Java". Sun pensó que "los usos de JavaAdapter para extender una clase Java o implementar múltiples interfaces son muy raros" (ibid) y decidió eliminar esta característica.

Si es aceptable enviar un archivo jar de 850 KB con su código, ¡tome Mozilla Rhino e implemente todas las clases abstractas que desee!

+0

¡Es más aceptable enviar un contenedor de 850 KB que no enviar la función en absoluto! –

Cuestiones relacionadas