2012-01-12 99 views
2

我試着使用Java註釋在一個Groovy類,但有麻煩設定一個Java類的靜態字段作爲參數:訪問在註釋靜態字段

的註釋:Id.java

package x.y.annotations; 

import java.lang.annotation.ElementType; 

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.FIELD) 
public @interface Id { 

    public Class<Adapter> adapter(); 

    public Class<Object> targetType(); 

    public String targetAttribute(); 

    public String onDelete(); 

} 

Java類與靜態字段:XPerson.java

package x.y.static.domain; 

public class XPerson { 

    public static String ID; 

} 

而且Groovy類,發生問題:Person.groovy

package x.y.domain 

import x.y.annotations.Id 
import x.y.static.domain.XPerson 

class Person { 

    @Id(adapter = Adapter, targetType = XPerson, targetAttribute = XPerson.ID, onDelete = "delete") 
    long id 
} 

的Eclipse標誌着 「targetAttribute = XPerson.ID」 部分使用:

Groovy:在預期 'xydomain.XPerson.ID' 是java.lang.String類型的內聯常數不在屬性表達@ xyannotations.Id

我也試過類似「XPerson。@ ID」或者爲ID字段定義一個getter,但沒有任何幫助。

任何提示都會很棒。

問候, 邁克爾

回答

3

註釋值可以僅是編譯時constant expressions。使字段final是一個選項。 (需要注意的是,該字段不能在靜態初始化程序/等中作爲片段暗示進行初始化。)

5

我在Groovy JIRA中發現了一個相關問題。這是一個錯誤。應該管用。見https://issues.apache.org/jira/browse/GROOVY-3278

+0

嗨,究竟「應該工作」?因爲它仍然是一個錯誤。 – 2015-03-23 14:05:55

+0

問題中所描述的內容應該可行,但它不會,因爲groovy有一個bug – 2015-03-23 15:02:32

相關問題