2010-09-10 3 views
1

Je voulais utiliser mon code java en tant que script beanshell mais beanshell lance Exception disant classe non trouvée dans l'espace de noms. N'y a-t-il pas de classe interne en beanshell ou a-t-elle d'autres usages?beanshell inner class

mon script ressemble ici:

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



class MyClass { 

} 

i utiliser la classe interne dans le script, que je déclare dans le script.

Merci, Bilal

+0

Bilal, il serait très utile de voir votre code, afin de savoir quel est le problème avec cela. BTW Beanshell prend également en charge les classes internes et (depuis v2.0) les classes internes anonymes. –

Répondre

1

Peut-être une réponse stupide ici, mais pourrait-il que la définition MyClass doit être au-dessus son utilisation dans le fichier? Les scripts de processus shell ne sont-ils pas linéaires?

Un rapide coup d'oeil dans la documentation ne sort pas sur, mais les tests du script suivant fonctionne certainement bien pour moi:

class MyClass { 
} 
MyClass m = new MyClass(); 
+0

cela n'a pas fonctionné. J'ai trouvé un autre moyen sans utiliser la classe interne. mais c'est 2. le temps que j'ai fui la classe interne. J'ai lu plusieurs fois que Beanshell accepte la classe interne mais ça n'a jamais marché pour moi. – bilal

0

définition de classe ne sont pas pris en charge par BeanShell.

Vous pouvez utiliser la syntaxe de classe interne BeanShell pour implémenter une interface:

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

v = x.overriddenMethod(); 

Ou

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

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

Dans votre cas, je pense que vous êtes mieux d'aller avec l'approche objet scripté:

myClass() { 

// methods ... 

return this; 

}; 

m = myClass(); // new instance 
0

Informations complémentaires: la classe interne anonyme comme argument ne peut pas utiliser, vous devez donc affecter votre implémentation à une variable. (En JMeter)

Non fonctionne:

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

Travaux:

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

Espérons que cela aidera à quelqu'un.