Ето един много прост пример за това, което виждам:
jrunscript -f -
js> var d = new java.util.Date();
js> var m = d.getClass().getMethods();
js> println(m[0].getClass().getName());
java.lang.reflect.Method
js> var name = m[0].getName();
script error: sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.lang.UnsupportedOperationException: invocation not supported (<STDIN>#1) in <STDIN> at line number 1
js> var time = d.getTime();
js> println(time);
1278421741768
js>
Променливата "d" е екземпляр на Java "Date", а "m" е масивът от обекти на Java "Method" за класа "Date". Когато се опитам да извикам getName()
на един от екземплярите на „Метод“ обаче, това не работи. Обърнете внимание, че извикването на getTime()
на екземпляра "Дата" работи добре, както и почти всички други извиквания към Java обекти. (Е, разбира се, не съм провеждал изчерпателно проучване, но като цяло работи и затова „Методът“ изглежда странен.)
Ако напиша (от страна на Java) клас, който основно обвива "Метод" и делегати, това работи добре. Така че не е като да има някаква присъща бариера между домейна на Javascript и нещата, които "Method" доставя. (Наистина, предполагам, че самият слой на скрипта трябва да извърши отражение, за да осигури основното съоръжение на първо място.)
Спомням си, че се сблъсках с този проблем и го хакнах последния път, когато се забавлявах с Rhino чрез рамката на скрипта JDK 6. Не помня дали разбрах защо се случва или не. някой знае ли