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

JavaSE对泛型的一些理解

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

JavaSE对泛型的一些理解

7泛型 7.1泛型的概念

​ 集合中的元素最好都是类型相同的,你不能第一个值是Integer,第二个值是String,第三个又是Integer,这样就乱了,也就存在这隐患,所以Java提供了泛型来解决这个安全问题,就跟数组一样,都要存储相同的数据类型的.此时引入了泛型的概念.你定义一个集合的话,没有加泛型,他就是默认的object,你可以定义为等,这样集合中的所有元素都素String元素,而且也只能输入String类的值或者其他操作.

那么是什么是泛型呢?

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。

参数化类型,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式,然后在使用/调用时传入具体的类型。

泛型有三种使用方式,泛型类,泛型接口和泛型方法。

7.2泛型类

泛型类就是一个类的泛型,比如说你定义了一个car类,他里面有属性车的品牌,车的价值,把这个车实体化之后,每个车都有这样的属性,这个car类也就可以称为一个泛型类了.

public class car {//car类是泛型类
    private T name;//属性为T,外部传来啥属性 这就是啥属性
    public car(T name) {//构造方法中的类型也为T,类型由外部指定
        this.name = name;
    }
    public T getName() {
        return name;
    }
    public void setName(T name) {
        this.name = name;
    }
}
public class test {
    public static void main(String[] args) {
        car a=new car<>("bm");//传进去的是String
        System.out.println(a.getName());
    }
}
bm

1.泛型的类型参数只能是类类型

2.泛型的类型参数可以有多个。

3.如果没有定义具体类型,默认为Object

7.3从泛型类派生子类

子类也是泛型类,子类和父类的泛型类型要一致

class A extends Demo

子类不是泛型类,父类要明确泛型的数据类型

class A extends Demo

7.4泛型接口

基本用法和泛型类是一样的,泛型接口与泛型类的定义及使用基本相同。

public interface Demo { //定义一个泛型接口
        public T next();
    }
class A implements Demo{//子类也是泛型类,子类和父类的泛型类型要一致
        @Override
        public T next() {//接口重写方法
            return null;
        }
    }
 public class A implements Demo {//子类不是泛型类,父类要明确泛型的数据类型
        @Override
        public String next() {
            return null;
        }
    }
7.5泛型通配符

?是类型通配符,可以代表具体类型实参,只能在实际传入参数的地方使用,不能再定义的时候使用。

public void car {} 这就是错误的使用car才可以传参数进去。

 public static void main(String[] args) {
        cara=new car(123);
        carb=new car("abc");//?表示传进去的是什么就是什么类型
        System.out.println(a.getName());
        System.out.println(b.getName());
    }
123
abc

类型上限,T可以是任意类型,例如,意思是 传进来的泛型只能是Number和Number类的子类比如Interger,像Object,String类就不行。

类型下限,只能传入T和T的父类,比如,此时,传进来的参数只能是Number和他的父类比如Object,此时Interger就传不进来了.

public class fanxing {
    private T key;
    public void test1(fanxing key){
    }
    public void test(fanxing key){
    }
    public static void main(String[] args) {
        fanxing a=new fanxing();
        fanxing b=new fanxing<>();
        a.test(a);
        b.test(b);
        a.test1(a);
        //b.test1(b);会报错的
        
    }
}
 
7.6类型擦除 

泛型出现在jdk1.5之后,在这之前java可能还不支持泛型,所以在底层还是用Object,泛型的作用主要是在编译期间。所以在代码进入JVM之后,系统会自动换成Object类型,与泛型相关的信息会被擦除,这就叫类型擦除

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

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

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