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)所以不管传递的是什么对象类型,编译之后都是一样的类型*/
}