栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java泛型详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java泛型详解

泛型类


可以等效为Object。
实例化的时候不指定泛型,那么认为此泛型为Object类型

实例化的时候指定泛型
在这个类里边,E就是相应的类型

继承的时候,指定父类泛型,子类就不需要指定泛型了

父类不指定泛型,那么子类也会变成一个 泛型类




应用场合:可以不指定固定类型,在实例化的时候使用

定义的泛型可以是多个参数类型


构造器类型不可以这么写

子类继承的写法

泛型类中的静态方法
因为静态方法是优先于类存在的,所以加载时这个A还没有定义类型,所以会报错!
泛型类中的静态方法不能使用类的泛型,而应该将该方法定义为泛型方法。
1.错误示范:

class demo{

    public static T show(T temp) {

        return temp;

    }

} 

2.正确示范:

class demo{

    public static  T show(T temp) {

        return temp;

    }

} 

原因:
在java中泛型只是一个占位符,必须在传递类型后才能使用。就泛型类而言,类实例化时才能传递真正的类型参数,由于静态方法的加载先于类的实例化,也就是说类中的泛型还没有传递真正的类型参数时,静态方法就已经加载完成。显然,静态方法不能使用/访问泛型类中的泛型。
这和静态方法不能调用普通方法/访问普通变量类似,都是因为静态申明与非静态申明的生命周期不同。

不能定义静态泛型变量
原因:
由于静态变量在java程序一运行时就已经被载入内存,而此时它的类型无法确定,而开辟空间必须知道类型,两者矛盾。

不可以直接创建A[ ]

泛型方法

当前泛型方法对应的泛型参数 和当前所在的类无关才是泛型方法。类中是E,方法中也是E,所以不是泛型方法
注意:不要忘记加 ,如果不加会把T当成一种数据类型,这个数据类型还没有定义。
T的类型是在调用时定义的。

泛型中子类父类关系

list1和list2不存在父类子类关系,是并列关系。

重载

public class demo {
    public  void fun(List objects) {
        System.out.println("Integer: " + a);
    }

    public  void fun(List objects) {
        System.out.println("Integer: " + a);
    }

    public  void fun(List objects) {
        System.out.println("Integer: " + a);
    }
}
 

这种重载方式会报错

通配符

List 是List < Object> List< String> List< Integer>的父类,可以接收任意类型!

public class demo {
    public static void main(String[] args) {
        List list1=new ArrayList<>();
        List list2=new ArrayList<>();
        List list3=new ArrayList<>();
        List list=null;
        list=list1;
        list=list2;
        list=list3;
    }
}
 

遍历
用Object

泛型的上限

List 是List< person>的父类,也是List< student>的父类。

class person{}
class student extends person{}
public class demo {
    public static void main(String[] args) {
        List list1=new ArrayList<>();
        List list2=new ArrayList<>();
        List list3=new ArrayList<>();
        List list=null;
        list=list1;//v这里报错
        list=list2;
        list=list3;
    }
}
 
泛型的下限 

List 是 List< Object> List< person的父类> 的父类。

class person{}
class student extends person{}
public class demo {
    public static void main(String[] args) {
        List list1=new ArrayList<>();
        List list2=new ArrayList<>();
        List list3=new ArrayList<>();
        List list=null;
        list=list1;
        list=list2;
        list=list3;//这里报错
    }
}


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号