java泛型的高级用法

小明 2025-05-06 03:00:38 5

Java ���型提供了强大的泛型机制,可以在编译时检查类型安全,并且可以编写通用的代码,使得代码更加灵活和重用。除了基本的泛型用法外,还有一些高级的泛型用法,以下是一些常见的高级泛型用法:

()
  1. 泛型通配符(Wildcard):通配符用于表示未知类型,可以增加泛型的灵活性。主要包括上界通配符 [] arrayOfLists = new List[2]; arrayOfLists[0] = new ArrayList(); arrayOfLists[1] = new LinkedList();

    1. 泛型类型推断:
    List list = new ArrayList(); // 使用了钻石操作符
    
    import java.util.*;
    public class Main {
        public static void main(String[] args) {
            // 泛型通配符示例
            List stringList = new ArrayList();
            stringList.add("Hello");
            stringList.add("World");
            printList(stringList);
            // 泛型方法示例
            Integer sum = add(10, 20);
            System.out.println("Sum: " + sum);
            // 泛型接口示例
            MyInterface myInterface = new MyImplementation();
            myInterface.doSomething("Generic Interface");
            // 泛型类的继承示例
            SubClass subClass = new SubClass();
            subClass.value = 100;
            System.out.println("Value: " + subClass.value);
            // 泛型限定和约束示例
            processNumber(10);
            // 泛型擦除与反射示例
            MyClass myObject = new MyClass(String.class);
            System.out.println("Type: " + myObject.type.getName());
            // 泛型数组示例
            List[] arrayOfLists = new List[2];
            arrayOfLists[0] = new ArrayList();
            arrayOfLists[1] = new LinkedList();
            System.out.println("Array Size: " + arrayOfLists.length);
            // 泛型类型推断示例
            List list = new ArrayList();
            list.add("Java Generics");
            System.out.println("List: " + list.get(0));
        }
        public static void printList(List list) {
            for (Object element : list) {
                System.out.println(element);
            }
        }
        public static  T add(T a, T b) {
            return a; // 这里仅作举例
        }
        interface MyInterface {
            void doSomething(T item);
        }
        static class MyImplementation implements MyInterface {
            @Override
            public void doSomething(T item) {
                System.out.println("Doing something with: " + item);
            }
        }
        static class GenericClass {
            T value;
        }
        static class SubClass extends GenericClass {
            // 子类可以继承父类的泛型类型
        }
        public static  void processNumber(T number) {
            System.out.println("Number is: " + number);
        }
        static class MyClass {
            private Class type;
            public MyClass(Class type) {
                this.type = type;
            }
        }
    }
    
The End
微信