De hecho, me he encontré con un problema, que es muy específico. Simplemente se manifiesta en Java 8 (usando Nashorn), pero no en Java 6 (usando Rhino). Si intenta acceder a una variable de instancia de un objeto Java a través de Javascript, el operador []
devuelve la instancia del método.
Supongamos que estoy ejecutando la siguiente declaración de Java:
class MyClass {
private boolean isSet=false;
public boolean isSet() { return isSet; }
}
Si manipular un objeto de dicha clase en Javascript, y luego tratar de acceder a ella con []
operador, me sale la referencia al método.
var obj = new MyClass();
var myfields = (myclass.getClass()).getDeclaredFields();
var myfieldname = myfields[0].name;
// The following prints the method declaration, not the boolean value:
// [jdk.internal.dynalink.beans.SimpleDynamicMethod boolean MyClass.isSet()]
println(obj[myfieldname]);
UPDATE: Aparentemente Nashorn's method overloading resolution mechanism ("implícitamente" o no intencionalmente) da mayor prioridad a los métodos sin argumentos más campos de instancia con el mismo nombre.
¿Por qué no lo intentaste solo? :) –
Esto no está permitido en C#. –