簡體   English   中英

幫助注釋

[英]Help with annotations

編輯 - @ Uri正確地指出這是濫用注釋; 試圖在注釋中實際創建菜單數據本身就是愚蠢的。

它們很適合綁定,但我認為我會堅持使用它們將文本數據鏈接到方法(@Menu(“文件”)部分),因為它比反映到方法名稱更明確和靈活。 我也搞砸了很多東西。 我會在幾天內將代碼發布在這里作為答案。

- 原始帖子 -

我沒有使用這些新奇的注釋,但它們看起來非常有趣。 我無法弄清楚語法(或者更恰當地說,使用它的最佳方式)。

在編寫一些代碼以回應這個問題時我發現我的方法已經過時了。

我曾經解析一個字符串來定義我的方法結構,然后使用反射將它傳遞給類,但我認為注釋可以創建一個更好的菜單結構。

我想用這樣的東西替換文件中的測試類:

@TopMenu("File,Edit")
@Menu(name="File","Save,Load,Print,Preview,Quit")
@Menu(name="Print","Preview,Print")
@Menu(name="Edit","Copy,Paste")

public class TestMenu {
    @MenuItem ("Save")
    public void save() {
        System.out.println("saved");
    }
    @MenuItem ("Load")
    public void load() {
    System.out.println("loaded");
    }
...

並將整個類傳遞給一個方法,該方法制造並返回綁定到類實例的JMenuBar而沒有進一步的輸入。

第一個問題是我無法弄清楚如何傳遞一個字符串的“默認”,他們都想擁有(attribute =“value”)而不僅僅是(“value”),這可以做到嗎? 我可以沒有它,但它有點冗長。 如果我能擺脫parens和/或引號會更好,但我沒有屏住呼吸(我想這樣做我必須為每個菜單項定義一個單獨的界面,這是不可接受的)。

其次,它不喜歡單個類上的多個@Menu標記。 我可以通過解析單個字符串來解決這個問題,但我想知道是否還有其他方法。

最重要的是,是否有一個圖書館已經這樣做了? (如果沒有人提出一個,我會在我開始工作時將代碼發布到這個帖子,以防其他人感興趣。)

我知道我會因此而失敗,但我真的認為人們開始過度使用Java中的注釋機制。

所有它的設計目的是為了編譯器或編程支持工具(例如,測試基礎設施,模型檢查器,代碼生成器等)提供有關類和方法的元信息的機制。

它不適用於實際的面向生產的代碼,宏元編程以及所有這些。 這與在C中使用預處理器宏而不是實際函數一樣不優雅。

如果菜單是程序中的第一類實體,我真的不覺得你應該為它們使用注釋機制。

至於您的具體問題,您可以輕松定義默認值。 但是,您無法開始執行嵌套注釋以克服菜單問題。 它真的不是為此設計的。

我看到附加多個注釋的方式是使用容器注釋,然后將項指定為數組。

@Retention(RetentionPolicy.RUNTIME)
public @interface Menu {
    String name();
    String[] children();
}

@Retention(RetentionPolicy.RUNTIME)
public @interface MenuBar {
    Menu[] value();
}

@Retention(RetentionPolicy.RUNTIME)
public @interface MenuItem {
    String value();
}

@MenuBar(
    {
        @Menu(name="File", children= {"Save","Load","Print","Preview","Quit"}),
        @Menu(name="Print", children= {"Preview","Print"}),
        @Menu(name="Edit", children= {"Copy","Paste"})
    }
)
public class TestMenu {
    @MenuItem ("Save")
    public void save() {
        System.out.println("saved");
    }

    @MenuItem ("Load")
    public void load() {
        System.out.println("loaded");
    }
}
  • 您可以為注釋定義默認值 - 這里的示例String str() default "text";
  • 你無法輕易克服這一點。 您可以定義接受字符串數組的注釋Menus

暫無
暫無

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

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