java泛型

泛型

  • 泛型是一种在编译时期进行类型检查和类型安全的机制,它允许类、接口和方法在定义时使用一个或多个类型参数
  • 边界:使用边界来限制泛型类型。例如, 表示类型 T 必须是 Number 或其子类。
  • 类型擦除:Java中的泛型是通过类型擦除实现的,这意味着在编译时会将泛型类型擦除为原始类型。这样做是为了保持向后兼容性。
  • 泛型限制:Java中的泛型不支持基本类型(int、char 等),只支持引用类型。
  • 泛型和继承:泛型类之间的继承关系与非泛型类类似,但泛型类的类型参数必须匹配。例如,List 不是 List 的子类。
  • 泛型擦除和桥方法:在泛型类中,编译器会生成桥方法来处理类型擦除。这些桥方法用于保持多态性。
  • 泛型和数组:不能创建参数化类型的数组,例如 List[] array = new List[10]; 是非法的。这是因为 Java 中的数组具有固定的类型。
  • 泛型和反射:由于类型擦除,泛型信息在运行时不可用。因此,在使用反射时,无法直接获取泛型类型信息。
  • 泛型同样的也可以看作是一个变量,只是,它变的不是数值,而是数据类型

泛型类

  • 泛型类:该类具有一个或多个类型参数,例如 class MyClass { … }。在类的定义中,您可以使用这些类型参数来定义类的字段、方法参数和返回类型。
// 定义一个泛型类
class Box<T> {
    private T value;

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

    public T get() {
        return value;
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建一个存储整数的Box对象
        Box<Integer> integerBox = new Box<>();
        integerBox.set(10);
        System.out.println("Integer Value: " + integerBox.get());

        // 创建一个存储字符串的Box对象
        Box<String> stringBox = new Box<>();
        stringBox.set("Hello, Generics!");
        System.out.println("String Value: " + stringBox.get());
    }
}

泛型方法

  • 泛型方法:可以在方法声明中使用类型参数,例如 public T myMethod(T value) { … }。这使得方法可以独立于类使用泛型。
// 定义一个泛型方法
public <T> void printArray(T[] array) {
    for (T element : array) {
        System.out.print(element + " ");
    }
    System.out.println();
}

// 使用泛型方法
Integer[] intArray = {1, 2, 3, 4, 5};
String[] strArray = {"Java", "Generics", "Example"};

System.out.print("Integer Array: ");
printArray(intArray);

System.out.print("String Array: ");
printArray(strArray);

通配符

  • 通配符:Java中的通配符用于表示未知类型。? 是通配符的基本形式。通配符可以用作泛型方法的参数,以增加灵活性。
// 定义一个泛型方法,使用通配符
public void displayList(List<?> list) {
    for (Object element : list) {
        System.out.print(element + " ");
    }
    System.out.println();
}

// 使用通配符
List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5);
List<String> strList = Arrays.asList("Java", "Generics", "Example");

System.out.print("Integer List: ");
displayList(intList);

System.out.print("String List: ");
displayList(strList);

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值