Java泛型类(接口,方法)使用

原本情况下,ArrayList中是Object类型对象:

ArrayList list = new ArrayList();

如果里面是基本类型int,当我们对里面元素进行求和时,只能对元素进行强制转换,泛型的使用,可以很好的解决上述问题:

1.泛型的定义

ArrayList list = new ArrayList<>();

2 泛型类

泛型类就是把泛型定义在类上,用户使用该泛型时候,才把类型明确下来。

使用时候泛型的名字作为数据类型使用

public class testMap {
    private E a;
    public void test(E m){
        this.a = m;
        System.out.println(this.a);
    }
}

 2.1确定泛型类型

    public static void main(String[] args) {
        testMap I = new testMap<>();
        I.test(6);
    }

 2.1.1在子类定义时候确定

public class subSan extends testMap{
    
}

2.1.2 在子类创建对象时候使用

public class subSan extends testMap{
    private E a;

    //方法重写
    public void test1(E m){
        this.a = m;
        System.out.println(this.a);
    }
}
    public static void main(String[] args) {
        subSan I = new subSan<>();
        I.test1(7);
    }

2.2 泛型类型的确定,定义子类时候确定泛型类型

Java泛型类(接口,方法)使用_第1张图片

 ArrayList可以向上转型,使用接口类型。

Java泛型类(接口,方法)使用_第2张图片

 List类型的对象不能能加元素

ArrayList类型的对象可以加元素

3.泛型方法 

    public static void main(String[] args) {
        System.out.println(test(4));
    }

    public static  T test(T t){
        return t;
    }

4.泛型上限&下限

我们在使用确定泛型的时候可以使用任意的引用数据类型去确定。但是在某些场景下我们要求这个泛型必须是某个类的子类或者是某个类的父类。这种情况下我们就需要用到泛型上限和泛型下限的范围。

如下传入参数的类型必须是Person及其子类

    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        ArrayList list2 = new ArrayList<>();
        ArrayList list3 = new ArrayList<>();

        list3.add(new Person("jia", 16));
        ArrayList list4 = new ArrayList<>();
        list4.add(new Student("ru", 18));
        test(list4);
    }

    public static void test(List list){
        Person person = list.get(0);
        System.out.println(person.getAge());
    }

如下,传入参数的类型必须是Student及其父类

    public static void test(List list){
        Person person = list.get(0);
        System.out.println(person.getAge());
    }

 4.1 泛型注意事项

1. 泛型上限可以在定义泛型类和方法参数上使用

public class Box {
    E e;
}

2. 泛型下限主要在方法参数上使用。

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