2012-12-19 1 views
8

У меня есть два проекта: проект scala и проект java. Мой проект scala ссылается на проект java в пути сборки. В моем Java проекте, я объявляю следующую аннотацию:Как получить аннотации метода java для работы в scala

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

В моем проекте лестницы, я аннотирование некоторых методов. То есть

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

В другом файле где-то я пытаюсь вытащить аннотации.

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

К сожалению, annotations всегда пустой массив. Я делаю что-то принципиально неправильное или я просто пропустил что-то незначительное? Благодаря!

EDIT Первоначально я аннотирования MyMethod с myAnnotation дважды, это неверно, так как кто-то указал. Оказывается, это не проблема. Я все еще получаю пустой массив для annotations. Никакое исключение не выбрасывается.

ответ

7

Я попробовал ваш код, проблема в том, что использование @MyAnnotation дважды MyMethod, который должен поднять AnnotationFormatError: Дублирование аннотации для класса

Когда я изменить, чтобы использовать его один раз, отражение только извлекает annotions.

+0

Спасибо, что указал. К сожалению, это не проблема. Даже с одной аннотацией я все равно получаю пустой массив. Никакое исключение не выбрасывается – Jordan

+0

Как вы это применили? Можете ли вы опубликовать пример? Благодаря! – Jordan

+0

Как я уже сказал, я просто использую ваш опубликованный код. Ваш опубликованный код вызывает исключения (первая версия) и имеет ошибки компиляции (вторая версия, вы должны определить тип для строки «var myMethod = null»), после того как я их разрешу, он работает. И моя версия scala - 2.9.3 –

 Смежные вопросы

  • Нет связанных вопросов^_^