java泛型

目录

使用泛型原因:

1、泛型类

 为什么需要泛型类:

案例

2、泛型方法

一个类中重载方法

案例

3、泛型接口

4、泛型类、泛型接口、泛型方法同时使用

5、泛型通配符

6、泛型上界和下界

7、泛型擦除


使用泛型原因:

        避免强制转换出错

1、泛型类

 为什么需要泛型类:

一个类的成员变量或者方法可能传入多个类型,则需要泛型类

案例

java泛型_第1张图片

2、泛型方法

为什么需要泛型方法:

一个类中重载方法

案例

原始代码:

java泛型_第2张图片

使用泛型类优化后,在类中只需要定义一个方法就可以支持shou方法传递多个类型

java泛型_第3张图片

使用泛型方法优化

java泛型_第4张图片

3、泛型接口

java泛型_第5张图片

java泛型_第6张图片

4、泛型类、泛型接口、泛型方法同时使用

5、泛型通配符

泛型通配符只用用于获取,不能用于添加。get后为object类型

6、泛型上界和下界

上界:

class Fruits {
}

/**
 * 苹果类
 */
class Apple extends Fruits {
}

/**
 * 红苹果类
 */
class RedApple extends Apple {
}

public class FanXingMethord {
    /**
     * 上界通配符:只能接收Apple及其子类类型的数据类型
     * 但是这个集合只能取不能存,因为Apple及其子类不知道具体存的是那个类型
     */

    public static void main(String[] args) {
        //fruit不是apple的子类
//        ArrayList fruits = new ArrayList<>();
//        fruits.add(new Fruits());
//        deal(fruits); //报错

        ArrayList apples = new ArrayList<>();
        apples.add(new Apple());
        deal(apples);

        ArrayList redApples = new ArrayList<>();
        redApples.add(new RedApple());
        deal(redApples);
    }

    public static void deal(List fruitsList) {
        Apple apple = fruitsList.get(0);
        System.out.println(apple);
//        fruitsList.add(new Apple());     //报错
//        fruitsList.add(new RedApple());  //报错
    }

}

下界

package fanxing;

import java.util.ArrayList;
import java.util.List;

class Fruits {
}

/**
 * 苹果类
 */
class Apple extends Fruits {
}

/**
 * 红苹果类
 */
class RedApple extends Apple {
}


public class FanXingMethord {
    /**
     * 上界通配符:只能接收Apple及其子类类型的数据类型
     * 但是这个集合只能取不能存,因为Apple及其子类不知道具体存的是那个类型
     */

    /**
     * 下界通配符:只能接收Apple及其父类类型的数据类型
     * 但是这个集合只能存不能取(不绝对),存只能存Apple及其子类,可以取但是不保证类型安全,取出来只能为Object
     *
     */

    public static void main(String[] args) {
        ArrayList fruits = new ArrayList<>();
        fruits.add(new Fruits());
        deal(fruits);

    }

    public static void deal(List fruitsList){
        Object object = fruitsList.get(0);
        fruitsList.add(new Apple());
        fruitsList.add(new RedApple());
        fruitsList.forEach(ele->{
            System.out.println(ele);
        });
    }

}

7、泛型擦除

问题:如果两个方法都接收的是list而泛型不同,则重载报错

java泛型_第7张图片

java泛型_第8张图片

你可能感兴趣的:(java基础,java,开发语言)