栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;
 }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号