2012-12-19 17 views
8

Mam dwa projekty, projekt scala i projekt Java. Mój projekt scala odwołuje się do projektu java na ścieżce budowania. W moim projekcie java, jestem oświadczając następującą adnotację:Jak uzyskać adnotacje metody Java do pracy w scala

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation { 
    public String Name(); 
} 

w moim projekcie Scala, mam opisywanie pewnych metod. To znaczy.

class MyClass { 
    ... 
    @MyAnnotation(Name="Blah") 
    def myMethod() { 
     ... 
    } 
} 

Gdzieś w innym pliku, próbuję usunąć adnotacje.

var methods = myClassInstance.getClass().getDeclaredMethods() 
var myMethod : Method = null 
for (method <- methods) { 
    if (method.getName().equals("myMethod")) { 
    myMethod = method 
    } 
} 
var annotations = myMethod.getDeclaredAnnotations() 

Niestety, annotations jest zawsze pustą tablicą. Czy robię coś fundamentalnie złego, czy też brakuje mi czegoś nieznacznego? Dzięki!

EDIT Początkowo byłem adnotacji myMethod z myAnnotation dwa razy, co jest błędne, jak ktoś zauważył. Okazuje się, że to nie był problem. Wciąż otrzymuję pustą tablicę dla annotations. Nie jest zgłaszany wyjątek.

Odpowiedz

7

Próbowałem kodu, problem jest, że korzystanie @MyAnnotation dwukrotnie myMethod, co powinno podnieść AnnotationFormatError: Duplikat adnotacji do klasy

gdy zmieniam go użyć raz, odbicie tylko pobiera annotions.

+0

Dzięki za wskazanie tego. Niestety to nie był problem. Nawet z jedną adnotacją wciąż otrzymuję pustą tablicę. Nie został zgłoszony żaden wyjątek. – Jordan

+0

Jak to działa? Czy możesz wysłać przykład? Dzięki! – Jordan

+0

Jak już powiedziałem, używam tylko opublikowanego kodu. Twój opublikowany kod podnosi wyjątki (pierwsza wersja) i ma błędy kompilacji (druga wersja, powinieneś zdefiniować typ dla linii "var myMethod = null"), po ich rozwiązaniu działa. A moja wersja scala to 2.9.3 –

Powiązane problemy