java 泛型从入门到入坑

java 泛型

1 泛型的概念

泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

2使用泛型的好处

  1. 避免了类型转换的麻烦,存储的是什么类型取出的就是什么类型;
  2. 把运行期(代码运行之后出现异常)异常提升为编译期(写代码的时候会报错)异常

3泛型的使用

1 泛型类与泛型方法
public class A { // 泛型类:定义类的时候指定类型形参T,在类里面T就可以当成类型使用
private T a;

public T getA() {
    return a;
}

public void setA(T a) {
    this.a = a;
}

}

继承的几种方法:

class B1 extends A {}

class B2 extends A {}

class B3 extends A {}

class B4<E1, E2> extends A {}

使用:
public static void main(String[] args) {

A a1 = new B1();
a1.setA(“a1”);
System.out.println(a1.getA());

B2 b2 = new B2<>();//菱形语法
b2.setA(“b2”);
System.out.println(b2.getA());

}

2 泛型接口和泛型方法

在泛型接口中,如下的生成器接口定义:

public interface Generator {
public T next();
}

然后定义一个生成器类来实现这个接口:

public class FruitGenerator implements Generator {

private String[] fruits = new String[]{"Apple", "Banana", "Pear"};

@Override
public String next() {
    Random rand = new Random();
    return fruits[rand.nextInt(3)];
}

}

调用:

public class Main {

public static void main(String[] args) {
    FruitGenerator generator = new FruitGenerator();
    System.out.println(generator.next());
    System.out.println(generator.next());
}

}

4 泛型通配符

常用的 T,E,K,V,?
?无界通配符

上界通配符 < ? extends E>

下界通配符 < ? super E>
T 和 ? 区别
泛型和通配符最根本的区别就是Java编译器会把泛型【T】推断成具体类型,而把通配符【?】推断成未知类型。Java编辑器只能操作具体类型,不能操作未知类型,如果有对参数做修改的操作就必须要使用泛型,如果仅仅是查看就可以使用通配符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值