Java 使用 wildcard 來做出像是 Swift 的 Any
一樣的功能。語法是 ?
。
使用
如果不想在 List 的宣告指定明確的類型,可以用 ?
。
List<?> list = new ArrayList<?>();
list.add("Hello Wildcard");
兩種規則
你可以透過兩種修飾字來指定你允許的 class。
Upper Bound
使用 extends
,意思是你允許任何某特定 type 的 subtype 。
比方, List<? extends Number>
就是宣告一個 List
其中的元素 type 都必須是 Number
的 subtype。它允許的 type 諸如 Integer
和 Double
。
Lower Bound
使用 super
,意思是你允許任何某特定 type 的 supertype。
比方, List<? super Number>
就是宣告一個 List
其中的元素 type 都必須是 Number
的 suertype。它允許的 type 諸如 Number
或是 Object
。
轉型
如果要轉成特定的型別也很簡單,就是:
List<?> list = Array.asList(4,5,9);
List<Number> number = (List<Number>) list;