Java中的泛型类

server/2024/10/11 13:24:47/

Java中的泛类


Java 的泛型(Generics)是一种语言特性,允许你定义类、接口和方法时使用类型参数。这使得代码更具可读性和安全性,因为编译器能够在编译时检查类型,而不是在运行时。

泛型类

定义泛型类时,可以使用类型参数。例如:

java">public class Box<T> {private T content;public void setContent(T content) {this.content = content;}public T getContent() {return content;}
}

在这里,T 是一个类型参数,可以在类的任何地方使用。当你创建 Box 的实例时,可以指定实际的类型参数:

java">Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String content = stringBox.getContent();

泛型方法

你还可以在方法中使用泛型。例如:

java">public class Util {public static <T> void printArray(T[] array) {for (T element : array) {System.out.println(element);}}
}

调用泛型方法时,可以显式或隐式地指定类型参数:

java">String[] stringArray = {"A", "B", "C"};
Util.printArray(stringArray);

泛型接口

接口也可以是泛型的。例如:

java">public interface Pair<K, V> {public K getKey();public V getValue();
}

然后实现这个接口:

java">public class OrderedPair<K, V> implements Pair<K, V> {private K key;private V value;public OrderedPair(K key, V value) {this.key = key;this.value = value;}public K getKey() { return key; }public V getValue() { return value; }
}

使用泛型接口时,指定类型参数:

java">Pair<String, Integer> pair = new OrderedPair<>("key", 123);

通配符

Java 泛型提供了通配符,用于处理泛型类型的未知类型。

无界通配符

表示可以是任何类型:

java">public void printList(List<?> list) {for (Object elem : list) {System.out.println(elem);}
}
有界通配符

表示类型的上下限:

java">// 上界通配符:表示类型必须是 Number 或其子类
public void processList(List<? extends Number> list) {// ... code ...
}// 下界通配符:表示类型必须是 Integer 或其超类
public void addIntegers(List<? super Integer> list) {// ... code ...
}

泛型的优点

  1. 类型安全:在编译时进行类型检查,减少了类型转换错误。
  2. 重用代码:通过泛型,代码可以适用于多种数据类型。
  3. 提高可读性:泛型代码更具可读性,因为它明确了使用的类型。

类型擦除

在运行时,所有的泛型类型信息都会被移除,这个过程称为类型擦除。编译器在编译时会进行类型检查和转换,但在运行时,所有的泛型类型都被转换为 Object 或其边界类型。例如:

java">public class Box<T> {private T content;public void setContent(T content) {this.content = content;}public T getContent() {return content;}
}

编译后:

java">public class Box {private Object content;public void setContent(Object content) {this.content = content;}public Object getContent() {return content;}
}

示例

这里是一个完整的例子,展示了泛型类、泛型方法和通配符:

java">import java.util.ArrayList;
import java.util.List;public class Main {public static void main(String[] args) {// 泛型类Box<String> stringBox = new Box<>();stringBox.setContent("Hello");System.out.println(stringBox.getContent());// 泛型方法List<Integer> intList = new ArrayList<>();intList.add(1);intList.add(2);Util.printList(intList);// 通配符List<Number> numberList = new ArrayList<>();numberList.add(1);numberList.add(1.5);processList(numberList);}public static void processList(List<? extends Number> list) {for (Number num : list) {System.out.println(num);}}
}class Box<T> {private T content;public void setContent(T content) {this.content = content;}public T getContent() {return content;}
}class Util {public static <T> void printList(List<T> list) {for (T element : list) {System.out.println(element);}}
}

这个示例展示了如何使用泛型类、方法和通配符来创建类型安全和可重用的代码。


http://www.ppmy.cn/server/58168.html

相关文章

【少儿编程Python:趣味编程,探索未来】第三章 编程魔法秀,玩转编程逻辑 / 第二节 控制结构的魔法咒语

欢迎进入Python编程的奇幻世界&#xff01;在这个课程中&#xff0c;我们将一起探索编程的乐趣&#xff0c;通过生动有趣的方式&#xff0c;培养孩子们的逻辑思维和创造力&#xff0c;让他们成为未来的科技小达人。 以下是我们课程的大纲&#xff1a; 注&#xff1a;在社区【架…

Unity3D 游戏摇杆的制作与实现详解

在Unity3D游戏开发中&#xff0c;摇杆是一种非常常见的输入方式&#xff0c;特别适用于移动设备的游戏控制。本文将详细介绍如何在Unity3D中制作和实现一个虚拟摇杆&#xff0c;包括技术详解和代码实现。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;大家可以点击…

青春正当时 | 人大金仓2024新生特训营热力开营

新生特训营精彩瞬间 孟夏时节&#xff0c;万物并秀。在这个充满希望的七月&#xff0c;人大金仓迎来了一批青春洋溢、才华横溢的新成员。7月8日&#xff0c;以“扬帆远航&#xff0c;筑梦金仓”为主题的2024新生特训营正式拉开帷幕&#xff0c;来自五湖四海的精英学子齐聚一堂&…

申请乙级测绘资质最新标准

截止到目前为止&#xff0c;测绘资质申请条件还是按照自然资源部于2021年发布的《自然资源部办公厅关于印发测绘资质管理办法和测绘资质分类分级标准的通知》&#xff08;自然资办发[2021]43号&#xff09;&#xff0c;具体内容如下&#xff0c;近期想申请测绘资质的企业可以参…

薄冰英语语法学习--冠词1

冠词有2个,the 和 a /an the 叫定冠词 常用形容一类事务、特指&#xff08;加强&#xff09;、放在转有名词前面。 就这3个 定冠词 1. 定冠词特指某个&#xff08;某些&#xff09;人或某个&#xff08;某些&#xff09;事物 Many people came here to visit the old cast…

【安全攻防】网络安全中的序列化与反序列

1.序列化与反序列化 首先要了解序列化与反序列化的定义&#xff0c;以及序列化反序列化所用到的基本函数。 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化&#xff0c;相当于游戏中的存档。 PHP中的序列化函数serialize() **serialize()**函数用于序列化对…

如何做一个透明度渐现且向上位移逐行出现的文字效果

前言 在这个夜黑风高的夜晚&#xff0c;你的眼睛已经开始有些疲惫。你的手指在键盘上轻轻地敲击着&#xff0c;仿佛在弹奏一首无声的夜曲。你的思绪在代码的海洋中飘荡&#xff0c;寻找着最后一行需要完成的代码。就在这时&#xff0c;你的老板走了过来&#xff0c;他的脸上带…

Java设计模式---(创建型模式)工厂、单例、建造者、原型

目录 前言一、工厂模式&#xff08;Factory&#xff09;1.1 工厂方法模式&#xff08;Factory Method&#xff09;1.1.1 普通工厂方法模式1.1.2 多个工厂方法模式1.1.3 静态工厂方法模式 1.2 抽象工厂模式&#xff08;Abstract Factory&#xff09; 二、单例模式&#xff08;Si…