好用心 做网站送女友,自己电脑上做网站别人访问,深圳网站建设,建设公司上市企业有多少?核心概念 Java 泛型是 Java SE 1.5 引入的一项重要特性#xff0c;它的核心思想是 参数化类型#xff08;Parameterized Types#xff09;#xff0c;即通过将数据类型作为参数传递给类、接口或方法#xff0c;使代码能够灵活地处理多种类型#xff0c;同时保证类型安全性…核心概念 Java 泛型是 Java SE 1.5 引入的一项重要特性它的核心思想是 参数化类型Parameterized Types即通过将数据类型作为参数传递给类、接口或方法使代码能够灵活地处理多种类型同时保证类型安全性。 一、基本语法
1. 泛型类/接口 在类名后添加类型参数 TT 是占位符可以是任意标识符,声明后类的占位符会被替换成对应类型
public class BoxT {private T content;public void setContent(T content) { this.content content; }public T getContent() { return content; }
}// 使用
BoxString stringBox new Box();
stringBox.setContent(Hello);
String value stringBox.getContent(); // 无需强制转换 2.泛型接口
public interface ITestT {void show(T t);
}public class TestImpl implements ITestString {Overridepublic void show(String t) {System.out.println(t);}
} 3.泛型方法
作为传参在方法返回类型前声明类型参数 T
// 修饰符 T 返回值类型 方法名(T 变量名){
public T void printArray(T[] array) {for (T element : array) {System.out.println(element);}
}// 调用时可显式指定类型或由编译器推断
printArray(new Integer[]{1, 2, 3});
作为返回值使用 ClassT 参数传递类型信息
public T T convert(Object input, ClassT targetType) {if (targetType String.class) {return targetType.cast(input.toString()); // 转成 String} else if (targetType Integer.class) {return targetType.cast(Integer.parseInt(input.toString())); // 转成 Integer}throw new IllegalArgumentException(不支持的类型: targetType);
}//调用
String strResult convert(123, String.class); // 返回 123String 类型
Integer intResult convert(456, Integer.class); // 返回 456Integer 类型 二、泛型通配符? 1. 无界通配符 ?
作为传参表示接受任何类型
public void processList(List? list) {for (Object elem : list) { /* ... */ }
}
作为返回值表示返回任何类型 public List? getData() {ListFood resultList new ArrayList();return resultList;} 2. 上界通配符 ? extends T 接受 T 或其子类适合读取数据
public double sum(List? extends Number list) {double sum 0.0;for (Number num : list) { sum num.doubleValue(); }return sum;
} 3. 下界通配符 ? super T 接受 T 或其父类适合写入数据
public void addNumbers(List? super Integer list) {list.add(1);list.add(2);
} 4. PECS 原则Producer-Extends, Consumer-Super
生产者Producer提供数据时用 extends如 List? extends T消费者Consumer消费数据时用 super如 List? super T 三、实际应用场景
1. REST API 响应封装
public class ApiResponseT {private int code;private String message;private T data; // 泛型数据// 构造方法和Getter/Setterpublic static T ApiResponseT success(T data) {ApiResponseT response new ApiResponse();response.setCode(200);response.setData(data);return response;}
}// 使用
ApiResponseUser userResponse ApiResponse.success(user);
ApiResponseListProduct productResponse ApiResponse.success(products); 2.Java 的集合框架如 ArrayListT, HashMapK,V
ListString names new ArrayList();
names.add(Alice);
String name names.get(0); // 不需要强制转换 3.工具类方法 泛型方法可用于编写通用的工具类例如排序、查找等。
public static T extends ComparableT T max(T a, T b) {return a.compareTo(b) 0 ? a : b;
}