<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 編寫注解處理器 如果沒有用于讀取注解的工具,那么注解不會比注釋更有用。使用注解中一個很重要的部分就是,創建與使用注解處理器。Java 拓展了反射機制的 API 用于幫助你創造這類工具。同時他還提供了 javac 編譯器鉤子在編譯時使用注解。 下面是一個非常簡單的注解處理器,我們用它來讀取被注解的 **PasswordUtils** 類,并且使用反射機制來尋找 **@UseCase** 標記。給定一組 **id** 值,然后列出在 **PasswordUtils** 中找到的用例,以及缺失的用例。 ```java // annotations/UseCaseTracker.java import java.util.*; import java.util.stream.*; import java.lang.reflect.*; public class UseCaseTracker { public static void trackUseCases(List<Integer> useCases, Class<?> cl) { for(Method m : cl.getDeclaredMethods()) { UseCase uc = m.getAnnotation(UseCase.class); if(uc != null) { System.out.println("Found Use Case " + uc.id() + "\n " + uc.description()); useCases.remove(Integer.valueOf(uc.id())); } } useCases.forEach(i -> System.out.println("Missing use case " + i)); } public static void main(String[] args) { List<Integer> useCases = IntStream.range(47, 51) .boxed().collect(Collectors.toList()); trackUseCases(useCases, PasswordUtils.class); } } ``` 輸出為: ```java Found Use Case 48 no description Found Use Case 47 Passwords must contain at least one numeric Found Use Case 49 New passwords can't equal previously used ones Missing use case 50 ``` 這個程序用了兩個反射的方法:`getDeclaredMethods()` 和 `getAnnotation()`,它們都屬于 **AnnotatedElement** 接口(**Class**,**Method** 與 **Field** 類都實現了該接口)。`getAnnotation()` 方法返回指定類型的注解對象,在本例中就是 “**UseCase**”。如果被注解的方法上沒有該類型的注解,返回值就為 **null**。我們通過調用 `id()` 和 `description()` 方法來提取元素值。注意 `encryptPassword()` 方法在注解的時候沒有指定 **description** 的值,因此處理器在處理它對應的注解時,通過 `description()` 取得的是默認值 “no description”。
                  <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>

                              哎呀哎呀视频在线观看