1、两个实例变量强制使用相同的T类型
通过定义一个类并将泛型参数应用于类中的多个实例变量,这样可以确保这两个实例变量具有相同的类型。
public class Main { public static void main(String[] args) { // 创建一个实例,确保两个实例变量有相同的类型 GenericExample<Integer> example = new GenericExample<>(10, 20); example.printValues(); } } // 定义一个类,使用泛型T来约束两个实例变量 class GenericExample<T> { private T first; private T second; public GenericExample(T first, T second) { this.first = first; this.second = second; } public T getFirst() { return first; } public T getSecond() { return second; } public void printValues() { System.out.println("First: " + first); System.out.println("Second: " + second); } }
2、使用泛型方法
如不想使用类级别的泛型,可以在方法级别使用泛型来约束两个实例变量的类型一致。
public class Main { public static <T> void printSameTypeValues(T first, T second) { System.out.println("First: " + first); System.out.println("Second: " + second); } public static void main(String[] args) { // 调用泛型方法,确保两个参数有相同的类型 printSameTypeValues(10, 20); // Integer类型 printSameTypeValues("Hello", "World"); // String类型 } }
3、使用通配符来约束类型
如要传入多个不同类型的对象,但仍然确保它们的泛型类型相同,可以使用通配符来进行限制。
import java.util.List; public class Main { public static void main(String[] args) { // 创建泛型对象 Pair<Integer> pair1 = new Pair<>(10, 20); pair1.printValues(); Pair<Double> pair2 = new Pair<>(5.5, 10.5); pair2.printValues(); // 使用上界通配符 List<Number> list1 = List.of(1, 2.5, 3L); // Number 类型列表 List<Integer> list2 = List.of(10, 20, 30); // Integer 类型列表 Pair.compareUpperBound(list1, list2); // 上界通配符示例 // 使用下界通配符 List<Number> list3 = List.of(10, 20, 30); // Number 类型列表 List<Object> list4 = List.of("A", "B", "C"); // Object 类型列表 Pair.compareLowerBound(list3, list4); // 下界通配符示例 } } class Pair<T> { T first; T second; // 构造函数 public Pair(T first, T second) { this.first = first; this.second = second; } // 打印两个实例变量的值 public void printValues() { System.out.println("First: " + first + ", Second: " + second); } // 使用上界通配符,确保两个实例变量是同一类型或兼容类型 public static void compareUpperBound(List<? extends Number> list1, List<? extends Number> list2) { // 确保 list1 和 list2 都是 Number 或其子类(如 Integer、Double) System.out.println("List 1 first element: " + list1.get(0)); System.out.println("List 2 first element: " + list2.get(0)); } // 使用下界通配符,确保两个实例变量是同一类型或兼容类型 public static void compareLowerBound(List<? super Integer> list1, List<? super Integer> list2) { // 确保 list1 和 list2 都是 Integer 或其父类(如 Number 或 Object) System.out.println("List 1 first element: " + list1.get(0)); System.out.println("List 2 first element: " + list2.get(0)); } }