泛型--Java学习笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44494648/article/details/99447456

泛型

允许程序在创建类的时候传入类型参数,在创建对象时,传入类型参数,确定类型,在一些工具类中使用使用十分广泛。

使用泛型:


class People<E,F>{//类名后“<E,F>”,就是实现泛型,我们暂且称E,F为泛型参数
    E id;
    F sex;
}
class Test{
    public static void main(String[] args) {
        People a=new People();//创建该类时,可以和普通类一样,这时,默认为E,F是Object类
        People<String,Integer> b=new People<>();//也可以指定新的类型,但不能是基本类型
        
    }
}

在集合中使用,用来指定该集合中所放置的元素类型。

List<String> list=new LinkedList<>();//这个List中就只能放String类型的元素从其中取出的元素也就直接是String类型,不用强转

深入

泛型可以使用在接口,类,方法中
增加泛型的类其构造器不用做泛型声明

从泛型类中派生的子类

父类:

class People<E,F>{
    E id;
    F sex;
}

创建该父类的继承类时,不能出现继承类
错误的创建:

class Student extends People<E,F>{...}//错误

正确的创建:

//1、去掉泛型参数,子类中的继承属性认为时Object,但又不是真正的Object,不会进行类型检查
class Student extends People{}

//2、创建的子类必须也带泛型参数,并且,个数不能少于父类的泛型参数的个数,但可以多余
class Student<E,F> extends People<E,F>{}

//3、创建子类时,给父类船如参数,确定其类型
class Student extends People<String,Integer>{}

这里为什么又这些 限制,其实你可以不知道这些限制,试着用错误的继承类,创建对象,想一想,逻辑就会不通。

注意

  • 由于泛型传入参数时,是在创建对象时,所以,对于静态属性或方法的返回值不能使用泛型,同样,接口中,属性省略了static,所以,接口中只能将泛型用于抽象方法的参数;
  • 泛型没有多态

类型通配符

class People<E>{
   E id;

    public static void main(String[] args) {
        People<B> a=new People<>();
        
        test(a);//无法调用**********************************

    }
    public static void test(People<A> atu){

    }
}
class A{
}
class B extends A{
}

这段代码中,注释中打星号的地方是错误的,这说明,B是A的子类,但 P《B》并不是P《A》的子类

这说明多态不能这样使用

扫描二维码关注公众号,回复: 7649318 查看本文章

类型通配符 —“?”
没有泛型数组 ,不能创建泛型数组
只有声明可以使用” ?“

//P<?>可以表示所有的P<>类的父类
//上面的方法改成这样,就可以调用了

   public static void test(People<?> atu){

    }

上下限:extend 与super


//P<? extends A>表示可以需要A的子类,A是?的上限
//P<? super A>表示可以需要A的父类,A是?的下限

    public static void main(String[] args) {
        People<B> a=new People<>();
        People<Object> b=new People<>();
        test01(a);
        test02(b);

    }
    public static void test01(People<? extends A> atu){

    }
    public static void test02(People<? super A> atu){

    }

猜你喜欢

转载自blog.csdn.net/weixin_44494648/article/details/99447456