Java中泛型的理解及如何使用——精简
💕💕 经过我反复的修改,这篇文章终于可以发布啦!🎶🎶 在看之前先来😍😍😍
正文开始
为什么要使用泛型🤔
需求:存放学生的成绩
//在集合中使用泛型之前的情况:
@Test!
public void test(){
ArrayList list = new ArrayList();
list.add(99);
list.add(98);
list.add(97);
}
存在问题: 问题一:类型不安全
list.add("Tom");
问题二:强转时,可能出现ClassCastException
for(Object score : list){
int stuScore = (Integer) score;
System.out.println(stuScore);
}
在集合中使用泛型的情况:以ArrayList为例
@Test
public void test1(){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(78);
list.add(87);
list.add(99);
list.add(65);
// list.add("Tom");
//编译时,就会进行类型检查,保证数据的安全
for(Integer score : list){ //避免了强转操作
int stuScore = score;
System.out.println(stuScore);
}
}
总结✌️
泛型的使用 jdk 5.0新增的特性 在集合中使用泛型: 总结: ① 集合接口或集合类在jdk5.0时都修改为带泛型的结构。 ② 在实例化集合类时,可以指明具体的泛型类型 ③ 指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法、构造器、属性等)使用到类的泛型的位置,都指定为实例化的泛型类型。 比如:add(E e) —>实例化以后:add(Integer e) 注意点:泛型的类型必须是类,不能是基本数据类型。需要用到基本数据类型的位置,拿包装类替换 如果实例化时,没有指明泛型的类型。默认类型为java.lang.Object类型。
自定义泛型结构
泛型类、泛型接口;泛型方法。 如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型 要求:如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型。
泛型类Order
public class Order<T> {
String orderName;
int orderId;
//类的内部结构就可以使用类的泛型
T orderT;
public Order(){
T[] arr = (T[]) new Object[10];
}
public Order(String orderName,int orderId,T orderT){
this.orderName = orderName;
this.orderId = orderId;
this.orderT = orderT;
}
public T getOrderT(){
return orderT;
}
public void setOrderT(T orderT){
this.orderT = orderT;
}
@Override
public String toString() {
return "Order{" +
"orderName=" + orderName + +
", orderId=" + orderId +
", orderT=" + orderT +
};
}
}
//泛型方法
public static <E> List<E> copyFromArrayToList(E[] arr){
ArrayList<E> list = new ArrayList<>();
for(E e : arr){
list.add(e);
}
return list;
}
}
测试类
public class GenericTest1 {
@Test
public void test1(){
Order order = new Order();
order.setOrderT(123);
order.setOrderT("ABC");
Order<String> order1 = new Order<String>("orderAA",1001,"order:AA");
order1.setOrderT("AA:hello");
}
@Test
public void test2(){
ArrayList<String> list1 = null;
ArrayList<Integer> list2 = new ArrayList<Integer>();
Person p1 = null;
Person p2 = null;
p1 = p2;
}
//测试泛型方法
@Test
public void test4(){
Order<String> order = new Order<>();
Integer[] arr = new Integer[]{1,2,3,4};
//泛型方法在调用时,指明泛型参数的类型。
List<Integer> list = order.copyFromArrayToList(arr);
System.out.println(list);
}
}
看完记得三连哦!
下一篇:
Java标识符规则与规范
