2012-12-19 77 views
8

我有兩個項目,一個scala項目和一個java項目。我的scala項目引用了構建路徑中的java項目。在我的Java項目中,我宣佈了以下注釋:如何讓java方法註解在scala中工作

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

在我的scala項目中,我註釋了一些方法。即

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始終是一個空數組。我是在做一些根本性錯誤還是我錯過了一些小事?謝謝!

編輯 最初,我用myAnnotation兩次註釋myMethod,這是有人指出的不正確。事實證明,這不是問題。 annotations我仍然得到一個空數組。沒有例外被拋出。

回答

7

我想你的代碼,問題是,你使用@MyAnnotation用於myMethod的兩次,這應該提高AnnotationFormatError,該:複製標註爲

當我改變使用一次,反射只檢索annotions。

+0

謝謝你指出。不幸的是,這不是問題。即使有一個註釋,我仍然得到一個空數組。沒有例外正在被拋出 – Jordan

+0

你是如何得到這個工作的?你能舉一個例子嗎?謝謝! – Jordan

+0

正如我所說,我只是使用您的發佈代碼。你發佈的代碼會引發異常(第一版本),並且有編譯錯誤(第二個版本,你應該爲這行'var myMethod = null'定義類型),在我解決它之後,它會起作用。而我的Scala版本是2.9.3 –