<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 定義注解 如下是一個注解的定義。注解的定義看起來很像接口的定義。事實上,它們和其他 Java 接口一樣,也會被編譯成 class 文件。 ```java // onjava/atunit/Test.java // The @Test tag package onjava.atunit; import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Test {} ``` 除了 @ 符號之外, `@Test` 的定義看起來更像一個空接口。注解的定義也需要一些元注解(meta-annoation),比如 `@Target` 和 `@Retention`。`@Target` 定義你的注解可以應用在哪里(例如是方法還是字段)。`@Retention` 定義了注解在哪里可用,在源代碼中(SOURCE),class文件(CLASS)中或者是在運行時(RUNTIME)。 注解通常會包含一些表示特定值的元素。當分析處理注解的時候,程序或工具可以利用這些值。注解的元素看起來就像接口的方法,但是可以為其指定默認值。 不包含任何元素的注解稱為標記注解(marker annotation),例如上例中的 `@Test` 就是標記注解。 下面是一個簡單的注解,我們可以用它來追蹤項目中的用例。程序員可以使用該注解來標注滿足特定用例的一個方法或者一組方法。于是,項目經理可以通過統計已經實現的用例來掌控項目的進展,而開發者在維護項目時可以輕松的找到用例用于更新,或者他們可以調試系統中業務邏輯。 ```java // annotations/UseCase.java import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface UseCase { int id(); String description() default "no description"; } ``` 注意 **id** 和 **description** 與方法定義類似。由于編譯器會對 **id** 進行類型檢查,因此將跟蹤數據庫與用例文檔和源代碼相關聯是可靠的方式。**description** 元素擁有一個 **default** 值,如果在注解某個方法時沒有給出 **description** 的值。則該注解的處理器會使用此元素的默認值。 在下面的類中,有三個方法被注解為用例: ```java // annotations/PasswordUtils.java import java.util.*; public class PasswordUtils { @UseCase(id = 47, description = "Passwords must contain at least one numeric") public boolean validatePassword(String passwd) { return (passwd.matches("\\w*\\d\\w*")); } @UseCase(id = 48) public String encryptPassword(String passwd) { return new StringBuilder(passwd) .reverse().toString(); } @UseCase(id = 49, description = "New passwords can't equal previously used ones") public boolean checkForNewPassword( List<String> prevPasswords, String passwd) { return !prevPasswords.contains(passwd); } } ``` 注解的元素在使用時表現為 名-值 對的形式,并且需要放置在 `@UseCase` 聲明之后的括號內。在 `encryptPassword()` 方法的注解中,并沒有給出 **description** 的值,所以在 **@interface UseCase** 的注解處理器分析處理這個類的時候會使用該元素的默認值。 你應該能夠想象到如何使用這套工具來“勾勒”出將要建造的系統,然后在建造的過程中逐漸實現系統的各項功能。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看