java泛型方法的定义和使用

2年前 (2022) 程序员胖胖胖虎阿
166 0 0

🍅 周周有福利,周周有惊喜 哪吒社区 - 风火轮计划
🍅 Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)
🍅 Java经典面试题大全:10万字208道Java经典面试题总结(附答案)
🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪
🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步
🍅 欢迎点赞 👍 收藏 ⭐留言 📝

目录

    • 一、基本介绍
    • 二、泛型的优点
      • 1、类型安全
      • 2、消除强制类型转换
      • 3、更高的效率
      • 4、潜在的性能收益
    • 四、常见泛型字母含义
    • 五、使用泛型时的注意事项
    • 六、泛型的使用
      • 1、泛型类

一、基本介绍

Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

二、泛型的优点

1、类型安全

泛型的主要目的是提高Java程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在非常高的层次上验证类型假设。没有泛型,这些假设就只能存在于系统开发人员的头脑中。

通过在变量声明中捕获这一附加的类型信息,泛型允许编译器实施这些附加的类型约束。类型错误就可以在编译时被捕获了,而不是在运行时当作ClassCastException展示出来。将类型检查从运行时挪到编译时有助于Java开发人员更早、更容易地找到错误,并可提高程序的可靠性。

2、消除强制类型转换

泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。尽管减少强制类型转换可以提高使用泛型类的代码的累赞程度,但是声明泛型变量时却会带来相应的累赞程度。在简单的程序中使用一次泛型变量不会降低代码累赞程度。但是对于多次使用泛型变量的大型程序来说,则可以累积起来降低累赞程度。所以泛型消除了强制类型转换之后,会使得代码加清晰和筒洁。

3、更高的效率

在非泛型编程中,将筒单类型作为Object传递时会引起Boxing(装箱)和Unboxing(拆箱)操作,这两个过程都是具有很大开销的。引入泛型后,就不必进行Boxing和Unboxing操作了,所以运行效率相对较高,特别在对集合操作非常频繁的系统中,这个特点带来的性能提升更加明显。

4、潜在的性能收益

泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,Java系统开发人员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的JVM的优化带来可能。

四、常见泛型字母含义

格式: 类名<字母列表>

T Type表示类型

K V 分辨表示键值对中的key value

E 代表Element

?表示不确定的类型

五、使用泛型时的注意事项

1、在定义一个泛型类时,在“<>”之间定义形式类型参数,例如:“class TestGen<K,V>”,其中“K”,“V”不代表值,而是表示类型。

2、实例化泛型对象时,一定要在类名后面指定类型参数的值(类型),一共要有两次书写。

3、使用泛型时,泛型类型必须为引用数据类型,不能为基本数据类型,Java中的普通方法,构造方法,静态方法中都可以使用泛型,方法使用泛型之前必须先对泛型进行声明,可以使用任意字母,一般都要大写。

4、不可以定义泛型数组。

5、在static方法中不可以使用泛型,泛型变量也不可以用static关键字来修饰。

6、根据同一个泛型类衍生出来的多个类之间没有任何关系,不可以互相赋值。

7、泛型只在编译器有效

六、泛型的使用

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

1、泛型类

package javase.genericity;
 
//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Generic<T> {
    //key这个成员变量的类型为T,T的类型由外部指定
    private T key;
    //泛型构造方法形参key的类型也为T,T的类型由外部指定
    public Generic(T key){
        this.key = key;
    }
    //泛型方法getKey的返回值类型为T,T的类型由外部指定
    public T getKey(){
        return key;
    }
 
    public static void main(String[] args) {
        //泛型的类型参数只能是类类型(包括自定义类),不能是简单类型
        //传入的实参类型需与泛型的类型参数类型相同,即为Integer.
        Generic<Integer> genericInteger = new Generic<Integer>(123456);
        //传入的实参类型需与泛型的类型参数类型相同,即为String.
        Generic<String> genericString = new Generic<String>("江疏影");
        System.out.println("泛型测试,key is "+genericInteger.getKey());
        System.out.println("泛型测试,key is "+genericString.getKey());
    }
}

泛型参数就是随便传的意思!

 
Generic generic = new Generic("111111");
Generic generic1 = new Generic(4444);
Generic generic2 = new Generic(55.55);
Generic generic3 = new Generic(false);

更多用法详见:【Java基础知识 11】java泛型方法的定义和使用

上一篇:Java零基础入门 12:Java中的Object类

下一篇:Java零基础入门 14:java枚举类

java泛型方法的定义和使用


添加微信,备注1024,赠送Java学习路线思维导图
版权声明:程序员胖胖胖虎阿 发表于 2022年11月6日 上午6:48。
转载请注明:java泛型方法的定义和使用 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...