关于Java的通配符边界
首先
关于Java的通配符界限,总结如下。
主要有三种形式:
– 无界通配符
– 上界通配符
– 下界通配符
非界境的野牌
使用通配符”?”可以在泛型声明时,以不限制类型参数的方式处理类。它主要具有两个特点:
– 方法的返回类型将是Object类型。
– 方法的参数只能传递null字面值。
public class Main {
public static void main(String[] args) throws Exception {
// 非境界ワイルドカードを使用しリストを宣言
ArrayList<?> list = new ArrayList<>();
ArrayList<String> strList = new ArrayList<>();
ArrayList<Integer> intList = new ArrayList<>();
list.containsAll(strList);
list.containsAll(intList);
}
}
上限境界的万金油
泛型声明时使用”extends”,限制可以用作类型参数的类的范围。对于”<? extends T>”,只能处理T或T的子类类型。
– 方法的返回值可以是任何类型。
– 方法的参数只能传递空值字面量。
public class Main {
public static void main(String[] args) throws Exception {
ArrayList<Integer> intList = new ArrayList<>();
ArrayList<String> strList = new ArrayList<>();
// IntegerはNumberのサブクラスのため呼び出すことができる
testList(intList);
// StringはNumberのサブクラスではないためコンパイルエラー
testList(strList);
}
// 上限境界ワイルドカードを使用したメソッド
public static void testList(List<? extends Number> list) {
// listに関する処理
}
}
下限境界是一个野卡。
“super” is used in generics declarations, such as <? super T>, to restrict the range of classes that can be used as type parameters.
In the case of <? super T>, only the type T or its superclass type can be handled.
-The return type of the method becomes Object type.
-Any type can be passed as an argument to the method.
public class Main {
public static void main(String[] args) throws Exception {
ArrayList<Number> numList = new ArrayList<>();
ArrayList<String> strList = new ArrayList<>();
// NumberはIntegerのスーパークラスのため呼び出すことができる
testList(numList);
// StringはIntegerのスーパークラスではないためコンパイルエラー
testList(strList);
}
// 下限境界ワイルドカードを使用したメソッド
public static void testList(List<? super Integer> list) {
// listに関する処理
}
}