django校园网站开发,C 网站开发招聘,网站建设月薪,wordpress卡密销售目录
通配符的作用 先看一段代码 用通配符?后,代码变化 结论
通配符上界
通配符下界
对通配符上下界的注释理解及其练习代码 简记: ? 用于在泛型的使用#xff0c;即为通配符. 在Java中#xff0c;通配符#xff08;wildcard#xff09;主要用于泛型…目录
通配符的作用 先看一段代码 用通配符?后,代码变化 结论
通配符上界
通配符下界
对通配符上下界的注释理解及其练习代码 简记: ? 用于在泛型的使用即为通配符. 在Java中通配符wildcard主要用于泛型编程用于表示一个不确定的类型。 通配符有三种形式1.通配符? 2.通配符? extends T 3. 通配符? super T 通配符的作用
先看一段代码
class Test0 {public static void main(String[] args) {System.out.println(1.String);MessageString message1 new Message();message1.setMessage(fly in the sky!);fun1(message1);System.out.println(2.Integer);MessageInteger message2 new Message();message2.setMessage(99);fun2(message2);System.out.println(3.Character);MessageCharacter message3 new Message();message3.setMessage(s);func3(message3);System.out.println(4.Short);MessageShort message4 new Message();message4.setMessage((short) 213);func4(message4);System.out.println(5.Long);MessageLong message5 new Message();message5.setMessage(1024L);func5(message5);System.out.println(6.Float);MessageFloat message6 new Message();message6.setMessage(3.1415926f);func6(message6);System.out.println(7.Double);MessageDouble message7 new Message();message7.setMessage(1024.0213);func7(message7);System.out.println(8.Boolean);MessageBoolean message8 new Message();message8.setMessage(true);func8(message8);}public static void fun1(MessageString tmp) {System.out.println(tmp.getMessage());}public static void fun2(MessageInteger tmp) {System.out.println(tmp.getMessage());}public static void func3(MessageCharacter tmp) {System.out.println(tmp.getMessage());}public static void func4(MessageShort tmp) {System.out.println(tmp.getMessage());}public static void func5(MessageLong tmp) {System.out.println(tmp.getMessage());}public static void func6(MessageFloat tmp) {System.out.println(tmp.getMessage());}public static void func7(MessageDouble tmp) {System.out.println(tmp.getMessage());}public static void func8(MessageBoolean tmp) {System.out.println(tmp.getMessage());}
}
用通配符?后,代码变化
class Test1 {public static void func(Message? temp) {System.out.println(temp.getMessage());}public static void main(String[] args) {System.out.println(1.String);MessageString message1 new Message();message1.setMessage(fly in the sky!);func(message1);System.out.println(2.Integer);MessageInteger message2 new Message();message2.setMessage(99);func(message2);System.out.println(3.Character);MessageCharacter message3 new Message();message3.setMessage(s);func(message3);System.out.println(4.Short);MessageShort message4 new Message();message4.setMessage((short) 213);func(message4);System.out.println(5.Long);MessageLong message5 new Message();message5.setMessage(1024L);func(message5);System.out.println(6.Float);MessageFloat message6 new Message();message6.setMessage(3.1415926f);func(message6);System.out.println(7.Double);MessageDouble message7 new Message();message7.setMessage(1024.0213);func(message7);System.out.println(8.Boolean);MessageBoolean message8 new Message();message8.setMessage(true);func(message8);}
}
结论
结论:使用通配符?可以接收所有的泛型类型,从而大大减少代码量, 注:虽然通配符 ? 可以接受任意类型,但正因为如此,由于不确定类型,所以在func方法中无法修改操作 在?的基础上又产生了两个子通配符 ? extends 类设置通配符上限 通配符上界 ? super 类设置通配符下限 通配符下界 通配符上界 通配符上界 语法? extends 上界 ? extends String//可以传入的实参类型是String或者String的子类 通配符的上界不能进行写入数据只能进行读取数据 通配符下界 通配符下界 语法? super 下界 ? super Integer//代表 可以传入的实参的类型是 Integer或者 Integer的父类类型 通配符的下界不能进行读取数据只能写入数据 class Food {
}class Fruit extends Food {
}class Apple extends Fruit {
}class Banana extends Fruit {
} 对通配符上下界的注释理解及其练习代码
class Food {}
class Fruit extends Food {}
class Apple extends Fruit {}
class Banana extends Fruit {}
class PlateT {//设置泛型private T message;public T getMessage() {return message;}public void setMessage(T message) {this.message message;}
}
public class Test2 {public static void main1(String[] args) {PlateApple applePlate new Plate();applePlate.setMessage(new Apple());func1(applePlate);PlateBanana bananaPlate new Plate();bananaPlate.setMessage(new Banana());func1(bananaPlate);}//通配符的上界//通配符的上界不能进行写入数据只能进行读取数据public static void func1(Plate? extends Fruit tmp) {//这里仍然不可以进行修改!tmp接收的是Fruit和他的子类此时存储的元素应该是哪个子类无法确定。System.out.println(tmp.getMessage());Fruit b tmp.getMessage();//向上转型System.out.println(b);}//通配符的下界//通配符的下界不能进行读取数据只能写入数据public static void main(String[] args) {PlateFruit fruitPlate new Plate();fruitPlate.setMessage(new Fruit());func2(fruitPlate);PlateFood foodPlate new Plate();foodPlate.setMessage(new Food());func2(foodPlate);}public static void func2(Plate? super Fruit tmp) {//传入参数为Fruit及其父类 ,//此时可以修改添加的是Fruit 或者Fruit的子类tmp.setMessage(new Apple());tmp.setMessage(new Fruit());//不能接收这里无法确定是哪个父类,父类太多了}
}