Java 泛型是一种在编写代码时不指定具体类型的机制,它使得代码更加灵活且类型安全。泛型可以在类、接口和方法中使用,允许你编写与类型无关的代码,提高代码的重用性和安全性。

以下是 Java 泛型的基本概念和用法:

1. 泛型类:
   在类的声明中使用泛型类型参数,以便在使用类时指定具体的类型。例如:
   public class Box<T> {
       private T value;

       public T getValue() {
           return value;
       }

       public void setValue(T value) {
           this.value = value;
       }
   }

   在实例化 Box 类时,可以指定具体的类型:
   Box<Integer> integerBox = new Box<>();
   integerBox.setValue(42);

   Box<String> stringBox = new Box<>();
   stringBox.setValue("Hello, Generics!");

2. 泛型方法:
   在方法的声明中使用泛型类型参数,以便在调用方法时指定具体的类型。例如:
   public <T> T genericMethod(T value) {
       // 方法体
       return value;
   }

   在调用泛型方法时,可以根据实际情况指定具体的类型:
   Integer intValue = genericMethod(42);
   String stringValue = genericMethod("Hello, Generics!");

3. 泛型接口:
   接口也可以使用泛型类型参数,与泛型类类似。例如:
   public interface Pair<K, V> {
       K getKey();
       V getValue();
   }

   在实现泛型接口时,需要指定具体的类型:
   public class OrderedPair<K, V> implements Pair<K, V> {
       private K key;
       private V value;

       // 实现方法...
   }

4. 通配符(Wildcards):
   使用通配符可以使泛型更加灵活。<?> 表示任意类型,<? extends T> 表示类型的上界,<? super T> 表示类型的下界。例如:
   public void processList(List<?> list) {
       // 处理任意类型的列表
   }

   public void processUpperBoundedList(List<? extends Number> list) {
       // 处理元素为 Number 或其子类的列表
   }

   public void processLowerBoundedList(List<? super Integer> list) {
       // 处理元素为 Integer 或其父类的列表
   }

泛型提供了一种强大的机制,可以在编译时提供更好的类型检查,并减少在运行时出现类型错误的可能性。通过使用泛型,可以编写更加通用和可维护的代码。


转载请注明出处:http://www.zyzy.cn/article/detail/13496/Java