java 泛型的上限与下限
2020-12-13 05:15
标签:import 声明 泛型 stat 对象 pac java 泛型 super ati 设置泛型对象的上限使用extends,表示参数类型只能是该类型或该类型的子类: 声明对象:类名 extends 类> 对象名 定义类:类名{} 设置泛型对象的下限使用super,表示参数类型只能是该类型或该类型的父类: 声明对象:类名 super 类> 对象名称 定义类:类名{} public static void show(List extends Number> l){ } public static void show(List super String> l){ } public static void show(List extends Number> l){} public static void show(List super String> l){} 泛型的上限 public static void main(String[] args) { Person p1.setVal(99); Person p2.setVal(3.14); Person p3.setVal("007"); show(p1);//√ show(p2);//√ show(p3);//× } public static void show(Person extends Number> p){//此处限定了Person的参数类型只能是Number或者是其子类,而String并不属于Number。 System.out.println(p.getVal()); } 泛型的下限 public static void main(String[] args) { Person p1.setVal(99);//Integer Person p2.setVal(3.14);//Double Person p3.setVal("007");//String Person p4.setVal(new Object());//Object show(p1);//× show(p2);//× show(p3);//√ show(p4);//√ } public static void show(Person super String> p){ System.out.println(p.getVal()); } 很好的例子! package generic; import java.util.ArrayList; import java.util.List; public class GenericDemo3 { public static void main(String[] args) { //因为show方法是用List>通配符接收的,所以可以是任意类型! List show(l1); List show(l2); List show(l3); List show(l4); //使用up方法的话接收类型为Number或者其子类 //up(l1);//错误,因为up方法接收类型为Number或者其子类,l1(String)不符合! up(l2); up(l3); //使用down方法的话接收类型为Number或者其父类 //down(l2);error down(l3); down(l4); } public static void down(List super Number> l){ for (Object object : l) { System.out.println(object); } } public static void up(List extends Number> l){ for (Object object : l) { System.out.println(object); } } public static void show(List> l){ for (Object object : l) { System.out.println(object); } } } java 泛型的上限与下限 标签:import 声明 泛型 stat 对象 pac java 泛型 super ati 原文地址:https://www.cnblogs.com/fanweisheng/p/11136181.html