202214 北京 泛型类,泛型继承,泛型方法

202214 北京 泛型类,泛型继承,泛型方法,第1张

2022/1/4 北京 泛型类,泛型继承,泛型方法

结论先行

1.静态方法中不能使用类的泛型

2.异常类不能声明为泛型类

3.泛型可以简写 ArrayList  list=new ArrayList<>();

集合中使用的泛型 ArrayList

//不能使用int,<>里不可以是基本数据类型
ArrayList  list=new ArrayList();
list.add(78);
list.add(87);
list.add(99);
list.add(65);
//list.add("Tom");编译时会报错


Iterator iterator=list.iterator;
while(iterator.hasNext()){
  int stuScore=iterator.next();
  System.out.println(stuScore);
}

集合中使用的泛型 Map

Entry是内部接口,不像map暴露在外边(有点像内部类)

Map map=new HashMap();
map.put("Tom",87);
map.put("Jerry",87);
map.put("Jack",67);
//map.put(123,"ABC");报错
Set> entry=map.entrySet()

泛型里有一句很容易忽略却很重要的点

如果实例化时,没有指明泛型的类型,默认类型为java.lang.Object类型

定义一个泛型类Order

public class Order{
String orderName;
int orderId;
T orderT;//类的内部结构可以使用类的泛型
}

泛型类不指定默认是Object类型

Order order=new Order();
order.setOrderT(123);//不报错
order.setOrderT("ABC");//不报错

实例化时指明泛型的类型

Order order1=new Order();
order1.setOrderT("AA:Hello");

在继承一个泛型类的时候:

1、子类SubOrder将不再是泛型类

//继承时指明泛型类型,那这个子类SubOrder将不再是泛型类
public class SubOrder extends Order{
}
//********************************************
SubOrder sub=new SubOrder();// SubOrder可以看成一个普通类了
sub.setOrderT(123);//orderT只能放Integer类型

2、子类SubOrder仍然是泛型类

//子类SubOrder仍然是泛型类
public class SubOrder extends Order{
}
//********************************************
SubOrder sub=new SubOrder();
 sub.setOrderT("order..");//orderT只能放String类型

在继承多个参数的泛型类的时候:

 下图就晕了


泛型方法:

泛型方法所属的类或接口带不带泛型无所谓,即泛型参数和类的泛型参数没有任何关系。

public List copyTfromArrayToList(E[] arr),这样写的话,java呢就会想是不是有个类的名字叫E呢,而不是去把E当做泛型处理,所以才要在public后面加上,表面E就是一个泛型。

public class Order{
String orderName;
int orderId;
T orderT;//类的内部结构可以使用类的泛型

//定义一个数组转list的泛型方法,至于是什么样的数组可没指定
public  List copyTfromArrayToList(E[] arr){
   ArrayList list=new ArrayList<>();
   for(E e : arr){
     list.add(e);
   }
   return list;
 }
}

接下来看看泛型方法怎么使用吧

注意泛型方法的泛型参数(Integer)和类的泛型参数(String)没有任何关系

Order order=new Order<>();
Integer[] arr=new Integer[]{1,2,3,4};
//泛型方法在调用时,需要指明泛型参数的类型
List List=order.copyFromArrayToList(arr);

注意点:泛型方法可以是静态的

原因:泛型参数是在调用方法时确定,并非在实例化类时确定

public class Order{
String orderName;
int orderId;
T orderT;//类的内部结构可以使用类的泛型

//定义一个数组转list的泛型方法,至于是什么样的数组可没指定
public static  List copyTfromArrayToList(E[] arr){
   ArrayList list=new ArrayList<>();
   for(E e : arr){
     list.add(e);
   }
   return list;
 }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5696675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存