бобовый внутренний класс - PullRequest
       3

бобовый внутренний класс

1 голос
/ 10 сентября 2010

Я хотел использовать свой Java-код в качестве скрипта BeanShell, но BeanShell выдает исключение, говоря, что класс не найден в пространстве имен. Нет ли внутреннего класса в бобовой оболочке или у него есть другое применение?

мой скрипт выглядит так:

.......
.......
java code
.......
.......
MyClass m = new MyClass(); //Error here: MyClass not fount in namespace



class MyClass {

}

Я использую внутренний класс в скрипте, который я объявляю в скрипте.

Спасибо, Билал

Ответы [ 3 ]

1 голос
/ 21 сентября 2010

Может быть, здесь глупый ответ, но может ли быть так, что определение MyClass должно быть выше его использования в файле?Разве bean-оболочка не обрабатывает сценарии линейно?

Быстрый просмотр документов не объясняет этого, но тесты следующего сценария, безусловно, работают для меня:

class MyClass {
}
MyClass m = new MyClass();
0 голосов
/ 14 сентября 2016

Дополнительная информация: анонимный внутренний класс в качестве аргумента не может использоваться, поэтому вам необходимо присвоить свою реализацию переменной. (В JMeter)

Не работает:

object.setContext(new SomeInterface(){
  //implement methods
});

Работает:

SomeInterface ctx = new SomeInterface(){
    //implement methods
});
object.setContext(ctx);

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 06 января 2013

Определение класса не поддерживается BeanShell.

Вы можете использовать синтаксис внутреннего класса BeanShell для реализации интерфейса:

    x = new MyInterface() {
        overriddenMethod() {
          // ....
        }
    }

v = x.overriddenMethod(); 

Или

    overriddenMethod() {
       //.....
    }

    // 'this' is a object of whatever Foo expects 
    //
    new Foo(this);

В вашем случае, я думаю, вам лучше использовать подход с использованием сценариев:

myClass() {

// methods ...

return this;

};

m = myClass(); // new instance
...