欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Java小白入门教程:泛型,泛型类型参数<T> <K> <V> <E>(必须Get的知识)

Java小白入门教程:泛型,泛型类型参数<T> <K> <V> <E>(必须Get的知识)

2025/2/2 23:19:51 来源:https://blog.csdn.net/m0_47484034/article/details/145413738  浏览:    关键词:Java小白入门教程:泛型,泛型类型参数<T> <K> <V> <E>(必须Get的知识)

目录

一、定义

二、作用

1、类型安全

2、代码复用

3、提高性能

三、使用场景

1、集合框架

2、类和接口

3、方法

四、语法及示例

1、泛型类

2、泛型接口

3、泛型方法

五、完整示例


一、定义

        泛型(Generics)是Java 5中引入的一个特性它允许在编写代码时指定类型参数

        简单来说泛型就像是类型的一个占位符,可以在创建类接口或方法时使用,然后在运行时指定具体的类型

二、作用

1、类型安全

        泛型可以保证在编译时检查类型错误,避免在运行时出现ClassCastException

2、代码复用

        通过泛型,可以编写更通用的代码,适用于多种数据类型

3、提高性能

        使用泛型可以减少对类型的强制转换,提高代码的运行效率

三、使用场景

1、集合框架

        ArrayList、HashMap等,使用泛型可以指定集合中元素的类型。

2、类和接口

        定义类或接口时,可以使用泛型来创建更通用的结构。

3、方法

        定义方法时,可以使用泛型来处理不同类型的参数。

四、语法及示例

1、泛型类

        `<T>`里的`T`,就像是你放了一个标记来占一个座位,比如一本书或者一个水杯。

        这个座位不固定给谁,可以是任何人(任何类型)。

        `T`就是那个小标记,它告诉我们:这个位置是给将来某个类型的东西预留的。

public class Box<T> { // T是类型参数,可以是任何类型private T t; // T类型的成员变量public void set(T t) { // T类型的参数this.t = t;}public T get() { // 返回T类型的数据return t;}
}

2、泛型接口

        这个`Generator`接口就像是一个工厂的说明书,它说:“我这里有个方法叫`next`,每次你调用它,我就会给你造一个类型为T的东西出来。”

        简单来说,就是每次用这个方法,都能拿到一个你想要的那种类型的新东西。

public interface Generator<T> {T next(); // 返回T类型的数据
}

3、泛型方法

        `K`是名字,`V`是东西。

        看到`<K, V>`,就想象成一个“名字-东西”的对儿。 `Map<K, V>`就像是一个帮你记住每样东西名字的盒子,你一说名字(键),它就能给你找到对应的东西(值)。简单说,就是用`K`找`V`的一个小帮手。

public class Util {public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {return p1.getKey().equals(p2.getKey()) &&p1.getValue().equals(p2.getValue());}
}

五、完整示例

public class Test {public static void main(String[] args) {// 创建一个只能装Integer的盒子Box<Integer> integerBox = new Box<Integer>();// 把整数10放进盒子里,自动装箱成IntegerintegerBox.set(10);// 打印盒子里的整数System.out.println("整数值: " + integerBox.get());// 创建一个只能装String的盒子Box<String> stringBox = new Box<String>();// 把字符串"Hello World"放进盒子里stringBox.set("Hello World");// 打印盒子里的字符串System.out.println("字符串: " + stringBox.get());// 创建两个包含字符串和整数的Pair对象Pair<String, Integer> p1 = new Pair<>("苹果", 1);Pair<String, Integer> p2 = new Pair<>("苹果", 1);// 比较这两个Pair对象是否相同boolean same = Util.compare(p1, p2);// 打印比较结果System.out.println("两个Pair是否相同: " + same);}
}// 定义一个泛型类Pair,可以装任意类型的键和值
class Pair<K, V> {private K key; // 键private V value; // 值// 构造方法,初始化键和值public Pair(K key, V value) {this.key = key;this.value = value;}// 获取键的方法public K getKey() {return key;}// 获取值的方法public V getValue() {return value;}
}// 泛型方法compare的类Util没有定义,这里假设它存在并且能够比较Pair对象
class Util {// 泛型方法,比较两个Pair对象是否相同public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue());}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com