(5)泛型各种用法

一.基本概念

“泛型”的字面意思就是广泛的类型。类,接口和方法带可以应用于非常广泛的类型。用一套代码可以用于多种数据类型,这样不仅可以复用代码,降低耦合性,而且还提高了代码的可读性以及安全性。

二.泛型的使用

1.泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法

2.Java 中的泛型是伪泛型, 实现方式类型擦除。

类型擦除:

Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为类型擦除。

【泛型信息只存在编译阶段,在进入JVM之前,与泛型相关的信息会被擦除。】

类型擦除可以参考https://www.cnblogs.com/wuqinglong/p/9456193.html

类型擦除的例子:

3.泛型中K T V E ? object等的含义

http://www.hollischuang.com/archives/252 

三.例子

1)泛型用在类上:

package com.test.model;

/**
 * @Author tanghh
 * @Date 2020/2/25 16:24
 */
public class ShoesModel<T> {
    T oneShones;
    T twoShones;

    public ShoesModel(T oneShones, T twoShones) {
        this.oneShones = oneShones;
        this.twoShones = twoShones;
    }

    public T getOneShones() {
        return oneShones;
    }

    public void setOneShones(T oneShones) {
        this.oneShones = oneShones;
    }

    public T getTwoShones() {
        return twoShones;
    }

    public void setTwoShones(T twoShones) {
        this.twoShones = twoShones;
    }
}
package com.test.nodefault;

import com.test.model.ShoesModel;

/**
 * @Author tanghh
 * @Date 2020/2/25 16:31
 */
public class TestShones {
    public static void main(String[]args){
        ShoesModel<Integer> pairInteger =  new ShoesModel<Integer>(1,2);
        int one1 = pairInteger.getOneShones();
        int two1 = pairInteger.getTwoShones();
        System.out.println("one:"+one1+",two:"+two1);


        ShoesModel<String> pairString  =  new ShoesModel<String>("I","测试");
        String one3 = pairString.getOneShones();
        String two3 = pairString.getTwoShones();
        System.out.println("one:"+one3+",two:"+two3);
    }
}

 

 运行结果:

 例子总结:  与普通类不同的点是  ShonesModel<T> 多了一个T,测试的时候String 类型,Integer 类型的值都可以填入。

2)泛型用在集合类上

集合遍历存在问题:

因为list集合中的元素存储了String类型,Integer类型的数据,强制成String类型的时候报错了。

四. 泛型的好处:

  • 代码复用:我们一套代码可以支持不同的类性。
  • 降低了耦合性:代码逻辑和数据类型之间分离,实现了解耦。
  • 更好的可读性:我们在使用集合的时候,定义了一个list 如List<String>,一看便知道这个一个存放String类型的list。
  • 更高的安全性:语言和程序设计的一个重要目标就是将bug消灭在摇篮里,能在写的时候消灭,就不要留在运行的时候。如我们定义一个List<String>这样的一个list。当我们往list里面放其他非String类型的数据时,我们的IDE(如Eclipse)就会报错提示。就算没有IDE。编译时,Java编译器也会提示,这称之为类型安全。这样就为程序设置了一道安全防护。同样的,使用泛型还可以省去使用普通对象时繁琐的强制类型转换。相反,使用普通对象,编译时并不会提示。假如传入的参数类型和最后强制类型转换的类型不一致。运行时就会出现ClassCastException,使用泛型则不会。

五. 好文章

https://blog.csdn.net/s10461/article/details/53941091

https://www.cnblogs.com/nm666/p/11324345.html

发布了54 篇原创文章 · 获赞 49 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tangthh123/article/details/104499661
今日推荐