泛型概念的深度理解

一、为什么使用泛型

 

泛型的好处:

Java引入泛型有以下好处:
 
1. 类型安全
 
- 好处:在编译阶段就能检查出类型不匹配的错误,避免了运行时因为类型错误导致的异常,增强了程序的健壮性。
- 例子:考虑一个存储学生成绩的列表。如果不使用泛型,可能会错误地将非成绩数据放入列表。

2. 代码复用性
 
- 好处:可以编写通用的代码,使其适用于多种不同类型,减少代码重复。
- 例子:定义一个通用的容器类,用来存储和获取两个对象。

3. 提高代码可读性


 
-好处: 泛型能够清晰地表明代码所处理的数据类型。例如, List<String> 一看就知道这个列表是专门用于存储字符串的。这比没有泛型时,需要查看代码中的添加和获取元素的操作才能猜测列表中存储的元素类型,要直观得多。

- 例子:有一个方法用于交换数组中的两个元素。
 

// 不使用泛型,参数类型是Object数组

public static void swap(Object[] array, int i, int j) {

    Object temp = array[i];

    array[i] = array[j];

    array[j] = temp;

}

// 使用泛型,明确参数是T类型的数组

public static <T> void genericSwap(T[] array, int i, int j) {

    T temp = array[i];

    array[i] = array[j];

    array[j] = temp;

}

// 使用示例

Integer[] intArray = {1, 2};

// swap((Object[])intArray, 0, 1); // 调用不使用泛型的方法,需要强制转换

genericSwap(intArray, 0, 1); 

// 调用使用泛型的方法,更直观,一看就知道是处理整数数组

System.out.println(intArray[0] + " " + intArray[1]);

 

4. 符合面向对象编程的理念

 

- 好处:能够更好地处理不同类型的数据,就像多态一样,可以对不同类型的数据进行通用的操作,提高了程序的灵活性和扩展性。

- 例子:设计一个简单的打印方法,能打印不同类型的数组。

// 打印整数数组
public static void printArray(int[] array) {
    for (int i : array) {
        System.out.print(i + " ");
    }
    System.out.println();
}
// 打印字符串数组
public static void printArray(String[] array) {
    for (String i : array) {
        System.out.print(i + " ");
    }
    System.out.println();
}
// 使用泛型实现通用的打印方法
public static <T> void genericPrintArray(T[] array) {
    for (T i : array) {
        System.out.print(i + " ");
    }
    System.out.println();
}
// 使用示例
int[] intArray2 = {3, 4};
String[] stringArray = {"a", "b"};
printArray(intArray2);
printArray(stringArray);
genericPrintArray(intArray2);
genericPrintArray(stringArray);
 

5283a746b9a44c6f84b7a2eee0c08378.png 

eaa58bcc837442dfa6fce141849b750b.png d593f73a6ed6435d8837ee426099c4d5.png

872254bbe1bd487f988836210d253e7d.png 

9bac6ff98fb649749e6fc767b5d30192.png 

a5bae85022ac46e19c564b9f2eaa7238.png 

bea6044af3e1462d9e6faf1458d35962.png 

d83482da7510455496ee2ade49b74e39.jpg 

f4f17d4679304154b2f3c960ca58eda8.png 

fb51995ed3ab4c3b8d58525b3f76881e.jpg 

203efccd329b480182f48765c40a9a21.jpg 

2e685442432a47e986f902159ca2a9cb.png 

2dcc64bf66764646bb7f2a7b406eb2f5.png 

8d082d2fb4224be9b80f133d64b79361.png 

77fd6caf400c42eaa3273fa0a0bd72bc.png 

c779d0964b454d02834a73de89c054b4.png

语法使用问题:

1.<T> 写在方法后面,声明这是一个泛型方法

72a4ac3d665342f2bec0bd2a26ab30ef.png

a6fba9ea1b62435d94e21f5fdaa56051.png 正确使用泛型:

da47a738c65e49f799dc48e02f248aba.png

 

public static T removeLast(Stack<T> stack)

public static <T> T removeLast(Stack<T> stack) 这两种写法的区别在哪

07f5217f0a5c4734b7d4b9faa4770299.png

131384fe62b3497893fef40b93d76f87.png

正确使用泛型类:

ee56153ee61e4631b69bf51c5850439d.png 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值