簡體   English   中英

有沒有辦法將常量傳遞給Groovy中的注釋?

[英]Is there a way to pass a constant to an annotation in Groovy?

在Java中,可以將常量String作為參數傳遞給注釋,但我無法弄清楚如何在Groovy中執行相同的操作。

例如:

    @Retention(RetentionPolicy.RUNTIME)
    @Target(value=[ElementType.METHOD])
    public @interface MyGroovyAnnotation {
        String value()
    }

    class MyGroovyClass {

        public static final String VALUE = "Something"

        @MyGroovyAnnotation(value=VALUE)
        public String myMethod(String value) {
            return value    
        }
    }

在這里,使用@MyGroovyAnnotation注釋方法myMethod ,如果我傳遞像@MyGroovyAnnotation(value="Something")這樣的字符串文字,它可以很好地工作,但是如果我嘗試像上面的例子中那樣傳遞VALUE ,我得到:

來自Eclipse:

Groovy:Expected 'VALUE' to be an inline constant of type java.lang.String in @MyGroovyAnnotation

從GroovyConsole運行:

expected 'VALUE' to be an inline constant of type java.lang.String not a field expression in @MyGroovyAnnotation
 at line: 20, column: 31

Attribute 'value' should have type 'java.lang.String'; but found type 'java.lang.Object' in @MyGroovyAnnotation
 at line: -1, column: -1

有沒有人知道我需要做些什么來使這個工作,或者甚至可能? 感謝您提供的任何幫助或見解。

我遇到了同樣的問題並且Gerard的答案有效,但我不需要創建一個新的Constants類,只需要引用現有的類。

例如:

@Retention(RetentionPolicy.RUNTIME)
@Target(value=[ElementType.METHOD])
public @interface MyGroovyAnnotation {
    String value()
}

class MyGroovyClass {

    public static final String VALUE = "Something"

    @MyGroovyAnnotation(value=MyGroovyClass.VALUE)
    public String myMethod(String value) {
        return value    
    }
}

我想對接受的答案發表評論,但我沒有50的聲譽。

這里建議類似的問題( access-static-field-in-annotation )與此不同,因為答案是使String final,這就是這里的情況。 我已經找到了一種方法來完成這項工作,所以我想我最好在這里回答有同樣問題的其他人! :)

上面的代碼不起作用,但指定要作為另一個類中的字段傳遞給注釋的String工作正常,奇怪的是:

    Retention(RetentionPolicy.RUNTIME)
    @Target(value=[ElementType.METHOD])
    public @interface MyGroovyAnnotation {
        String value()
    }

    class Constants {
        public static final String VALUE = "Something"
    }

    public class MyGroovyClass {

        @MyGroovyAnnotation(value=Constants.VALUE)
        public String myMethod(String value) {
            return value
        }
    }

我不確定為什么其中一種情況有效而另一種情況無效。 閱讀上述類似問題中提到的bug中的注釋,似乎Groovy開發人員遇到了一些問題,這些問題涵蓋了Java將常量String引用作為注釋參數傳遞的所有情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM