圖解jdk1.8新特性(3)— 註解與類型推測優化

  • 2019 年 10 月 29 日
  • 筆記

圖解jdk1.8新特性(3)— 註解與類型推測優化

獲取同一類型多個註解

​ jdk1.8的java.lang.Class類新增了方法getAnnotationsByType方法,該方法可以獲取某一個類型的註解列表,具體程式碼示例如下:

public class AnnotationTest {        @Target(ElementType.TYPE)      @Retention(RetentionPolicy.RUNTIME)      public @interface Filters {          Filter[] value();      }        @Target(ElementType.TYPE)      @Retention(RetentionPolicy.RUNTIME)      @Repeatable(Filters.class)      public @interface Filter {          String value();      }        @Filter("filter1")      @Filter("filter2")      public interface Filterable {        }        @Filters({@Filter("filter1"), @Filter("filter2")})      public interface Filterable2 {        }        public static void main(String[] args) {          for (Filter filter : Filterable.class.getAnnotationsByType(Filter.class)) {              System.out.println(filter.value());          }          for (Filters filter : Filterable.class.getAnnotationsByType(Filters.class)) {              System.out.println(filter.value().length);          }          for (Filter filter : Filterable2.class.getAnnotationsByType(Filter.class)) {              System.out.println(filter.value());          }          for (Filters filter : Filterable2.class.getAnnotationsByType(Filters.class)){              System.out.println(filter.value().length);          }      }  }    輸出如下:  filter1  filter2  2  filter1  filter2  2

更好的類型推斷

​ 上面可以看出getOrDefault第二個參數的類型可以通過第一個參數來推斷,如果在jdk1.8之前,需要寫成如下形式:

value.getOrDefault("asas", Value.<String>defaultValue());

註解的進一步擴展

  • jdk1.8擴展了註解的上下文,現在註解幾乎可以加到任何地方:局部變數、泛型類、父類與介面的實現,就連方法的異常也能添加註解
  • ElementType.TYPE_USE和ElementType.TYPE_PARAMETER是兩個新添加的用於描述適當的註解上下文的元素類型