Я использую javax.script.*
с Rhino для написания сценариев в Java-программе.Создание экземпляра класса в интерпретаторе Rhino в Java Scripting
Сценарий может реализовывать интерфейс просто отлично, но когда я пытаюсь использовать аналогичный синтаксис для создания абстрактного класса (давая определения для нереализованных методов), я получаю сообщение об ошибке MyTestAbstractClass
(класс, который я пытаюсь создать) является интерфейсом или абстрактным. Я делаю что-то очень плохое?
Это код Javascript Я использую:
var testObject = new foo.mytestpackage.TestAbstractClass() {
printMessage: function() {
print("foo");
}
};
Когда TestAbstractClass
является класс с нормальным конструктор (без параметров), я получаю следующую трассировку стека:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: error instantiating (JavaAdapter: first arg should be interface Class (<Unknown source>#1)): class com.merkle.TestObject is interface or abstract (<Unknown source>#1) in <Unknown source> at line number 1
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
at javax.script.AbstractScriptEngine.eval(Unknown Source)
Я используя Sun (немного упрощенное, как я слышал) внедрение Rhino и использование официальных баннеров Rhino - это то, чего я бы хотел избежать, поскольку они довольно большие.
Не могли бы вы пояснить «потреблять реализацию»? – hexafraction
Я имею в виду, что вам нужно будет написать не-абстрактный класс (например, 'Foo') в Java, расширяющий абстрактный тип, а затем просто используйте это в своем коде Rhino (например,' var f = new Foo(); ') – McDowell
Ah , ОК. Поэтому я мог бы также, если бы мне нужны абстрактные методы, пройти в нужный интерфейс? Может ли интерфейс быть вложенным типом? – hexafraction