为什么需要学习泛型(Generic) ?详细解读(一)

本文探讨了为何需要学习Java中的泛型,它旨在解决集合存储不同类型元素时出现的安全性和遍历问题。通过引入泛型,可以实现编译时期的类型确定,消除类型转换警告,提高代码的安全性和效率,满足开闭原则,增强代码可读性和可维护性。示例中展示了泛型如何应用于方法和数组类型参数化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.sxt.genericdemo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*

  • 为什么需要学习泛型(Generic)?

  • 在JDK1.5之前是没有泛型,当时集合能够存储的都是使用父类Object类型作为形参接受所有的类型

  • 如果存储的是同一种类型向下转型没问题,如果集合存储的是不同类型,那么会出现ClassCastException类型转换异常

  • 所以我们在转型之前做类型判断,判断后虽然解决了安全问题,但是又出现了 遍历不完全的情况,所以我们需要针对Object

  • 可能出现的子类做逐一判断,判断后解决了遍历不完整和安全问题,但是如果集合又添加了一个新的类型的元素,遍历又不

  • 完整,需要继续添加else if语句块,所以违背了开闭原则,不好维护,可以违背开闭原则,但是又因为Object类有无数个

  • 子类,所以永远无法解决,所以引入了泛型

  • 泛型是模仿数组方法的特点:

  • 模仿数组的 编译时期 确定类型

  • 模仿方法的 参数化类型

  • 泛型的概述: 泛型是一种独立的技术,和集合无关,是能够将类型在编译时期提前确定的参数化类型

  • 泛型的格式: 这里的E必须是引用数据类型,这里可以A~Z

  • 泛型的好处:

  • 1.消除了黄色警告线,提高了安全性

  • 2.去除了向下转型,提高了效率

  • 3.满足了开闭原则 (提高了扩展性和可维护性)

  • 4.提高了可读性

  • 5.简化了代码
    */
    public class GenericDemo01 {

    // 模仿方法的 参数化类型
    public static double add(double a, int b) {
    double sum = a + b;
    sum = sum + a;
    sum = sum - b;
    sum = a - b;
    return sum;
    }

    public static void main(String[] args) {
    // 模仿数组的 编译时期 确定类型
    String[] strs = new String[3];
    strs[0] = “abc”;
    for (String s : strs) {
    System.out.println(s);
    }

    Collection<String> c = new ArrayList<String>();
    c.add("123");
    /*c.add(28);
    c.add(new Employee());
    c.add(2.5);*/
    c.add("efg");
    c.add("hij");
    
    // 遍历集合 泛型的传染性(个人理解,不是官方的定义)
    Iterator<String> it = c.iterator();
    /*while (it.hasNext()) {
    	Object obj = it.next();
    	// 希望访问每一个元素子类所特有的方法  
    	// 访问 String 的 length Ineger 的 intValue 以及 员工 getName和getAge方法
    	if (obj instanceof String) {
    		String s = (String) obj;
    		System.out.println(s + "|" + s.length());
    	} else if (obj instanceof Integer) {
    		Integer i = (Integer) obj;
    		System.out.println(i + "|" + i.intValue());
    	} else if (obj instanceof Employee) {
    		Employee e = (Employee) obj;
    		System.out.println(e.getName() + "|" + e.getAge());
    	}
    	
    }*/
    
    while (it.hasNext()) {
    	String s = it.next();
    	System.out.println(s + "|" + s.length());
    }
    

    }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值