GenericExercise1
package GenericExercise20240725;
import java.util.ArrayList;
import java.util.List;
public class GenericExercise1 {
public static void main(String[] args) {
// 泛型是JDK5以后引入的新的特性,主要目的是为了提供编译时的类型安全检测机制
// 使用泛型的好处-> 1.将运行时出现的问题提前到编译期间
// 2.避免了强制类型转换
// 假如说没有泛型
ArrayList list = new ArrayList();
list.add("Hello");
list.add(123);
list.add(true);
list.add(3.14);
System.out.println(list); // 假如说没有泛型,所有类型的数据都可以存放到集合中,但是取出元素十分麻烦
String element = (String)list.get(1); // 想要用get方法得到元素的话,必须强制类型转换,因为默认是Object类型的
String element1 = (String)list.get(0); // 假如0索引正好是String类型的,那么此操作正确
String element2 = (String)list.get(1); // 但1索引不是String类型的,编译也不会报错,只有运行之后才会报错
// 就算不会出现类型错误的情况,但是也可以避免类型转换,节约时间
}
}
GenericExercise2
package GenericExercise20240725;
import java.util.Scanner;
public class GenericExercise2 {
public static void main(String[] args) {
// Java中可以用泛型方法来简化代码,因为泛型方法的参数可以接收多种数据类型,所以说很多类似的方法
// 可以通过泛型方法来实现,从而简化代码
Integer[] integerArray = {1, 2, 3, 4, 5};
Double[] doubleArray = {1.1, 2.2, 3.14, 4.5, 5.4};
String[] stringArray = {"abc", "acb", "cba", "cba", "bac"};
// 有三个不同类型的数组,可以用一个泛型方法将其遍历打印
printArray(integerArray); // 泛型方法的参数可以传递一切引用数据类型
printArray(doubleArray);
printArray(stringArray);
}
public static <E>void printArray(E[] array) {
for (E e : array) {
System.out.printf("%s ", e);
}
System.out.println();
}
// 泛型方法可以传递一切引用数据类型的原理:类型擦除
/*在Java中,泛型是在编译时处理的,编译器会在编译过程中移除所有的泛型类型信息,这个过程称为类型擦除。
类型擦除的结果是,所有的泛型类型参数都会被替换为它们的上界(如果没有指定上界,则替换为Object)所以
不管传递的是什么对象类型,编译之后都是一样的类型*/
}