首页 > 编程语言 >Java--泛型

Java--泛型

时间:2024-08-28 09:06:54浏览次数:9  
标签:Java -- 代码 类型 泛型 OrderedPair public

目录

什么是泛型

泛型是Java SE 5中引入的一个新特性,它提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。简单来说,泛型是一种参数化类型,它可以将类型(类、接口、枚举等)作为参数传递给类、接口或方法。这样,你就可以创建更加灵活和可重用的代码。

泛型的作用

  1. 类型安全:泛型的主要目标是提高代码的类型安全性。使用泛型,你可以在编译时检查类型错误,而不是在运行时。
  2. 消除类型转换:使用泛型后,很多情况下你可以避免显式的类型转换,因为编译器会帮你处理这些转换。
  3. 提高代码的重用性:泛型使得代码更加通用,可以应用于多种类型,从而提高代码的重用性。
  4. 清晰的代码:使用泛型可以让代码更加清晰,因为它明确了操作的类型。

泛型的特性

  1. 类型参数化:泛型允许在类、接口和方法中定义类型参数。
  2. 类型擦除:泛型信息只存在于编译时,在运行时,Java的泛型是通过类型擦除来实现的。这意味着泛型信息会被擦除,替换为它们的限定类型(如Object)。
  3. 限定类型:你可以为泛型指定一个或多个限定类型,这些限定类型可以是类也可以是接口。
  4. 通配符:泛型中的通配符(?)用于表示未知的类型。

泛型的使用

泛型类

public class Box<T> {  
    private T t;  
  
    public void set(T t) { this.t = t; }  
    public T get() { return t; }  
}  
  
// 使用  
Box<Integer> integerBox = new Box<>();  
integerBox.set(123);  
Integer integer = integerBox.get();

泛型接口

public interface Pair<K, V> {  
    public K getKey();  
    public V getValue();  
}  
  
// 实现  
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;  
    }  
  
    @Override  
    public K getKey() { return key; }  
    @Override  
    public V getValue() { return value; }  
}

泛型方法

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());  
    }  
}  
  
// 使用  
OrderedPair<String, Integer> p1 = new OrderedPair<>("even", 8);  
OrderedPair<String, Integer> p2 = new OrderedPair<>("odd", 8);  
boolean same = Util.compare(p1, p2);

泛型通配符

public void printCollection(Collection<?> c) {  
    for (Object e : c) {  
        System.out.println(e);  
    }  
}  
  
// 限定通配符  
public void printNumbers(Collection<? extends Number> c) {  
    for (Number n : c) {  
        System.out.println(n);  
    }  
}

泛型是Java中一个非常强大的特性,它极大地提高了代码的类型安全性和可重用性。掌握泛型的使用对于编写高质量的Java代码至关重要

标签:Java,--,代码,类型,泛型,OrderedPair,public
From: https://www.cnblogs.com/yangcurry/p/18383915

相关文章

  • Java学习笔记10-运算符
    Java运算符是用于执行各种数学、逻辑和位运算的符号。Java中的运算符可以分为以下几类:一、算术运算符用于执行基本的数学运算,如加、减、乘、除和取模。常用的算术运算符包括+、-、*、/和%。算数运算符详解Java中的算术运算符包括加、减、乘、除、取模等,下面分别详细介绍。1.1......
  • 【数据结构】【模板】李超线段树
    李超线段树定义可以看看洛谷的模板题目:作用优化动态规划,如果可以将一个动态规划的转移式子转化为\(y=kx+b\)的形式,那么我们可以边转移边将\(y=kx+b\)这条线段放入李超线段树,然后在下次转移时,直接调用下次计算出来的\(x\)位置上的最大值或最小值。(结合题目理解......
  • 如何有效学习Android Framework:从系统编译到Framework深入
    Android开发者中,不少人希望从应用开发过渡到系统层次的开发,特别是深入理解和掌握Framework的开发技能,这不仅能为你打开新的职业大门,还能让你更深入地理解Android系统的运行机制。本文将介绍如何从系统编译开始,逐步深入到系统应用和Framework的学习路径。1.掌握系统编译:打好基础......
  • 调整 MongoDB 以适应批量加载
    将几十亿条记录加载到MongoDB中,开始时加载速度还不错,但一段时间后就开始明显放缓。通过观察指标进行了一些研究,发现随着时间的推移,WiredTiger的检查点时间越来越长。检查点时间从最初的几秒到后面的几分钟。在检查点期间,性能基本上是直线下降: WiredTiger检查点从MongoDB......
  • MySQL索引底层实现原理
    索引的本质MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最......
  • SDKD 2024 Summer Training Contest E2补题
    SDKD2024SummerTrainingContestE2A-PaperWatering题意对x进行至多k次操作(平方或开方后向下取整),求可以得到多少不同的数。思路平方完一定不同,且平方完后一定能开方出整数,所以只用额外考虑开方后平方的情况。若开方再平方与原来不同,则答案加上当前变化数的次数,直到变......
  • 基于Ubuntu部署企业级kubernetes集群
    1.主机名配置由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为k8s-master01;其中2台为workoer节点,名称分别为:k8s-worker01及k8s-worker02master节点hostnamectlset-hostnamek8s-master01Worker01节点hostnamectlset-hostnamek8s-worker01Work......
  • Markdown学习
    Markdown学习一.AI平台返回的内容1.Markdown深入浅出讲解及其详细语法Markdown是一种轻量级的标记语言,以其简洁、易读、易写的特点,在文档编辑、博客写作、代码笔记等领域得到广泛应用。它允许用户通过简单的文本格式编写文档,并轻松转换为HTML等富文本格式,无需复杂的排版操作......
  • 使用 perf probe测量Linux用户空间代码的执行时间
    1Linuxperf简介perf是Linux内核自带的一个强大的性能分析工具,它能够深入到内核和用户空间,提供丰富的性能计数器和事件跟踪功能,帮助开发者和系统管理员精确地定位系统性能瓶颈。1.1perf的主要功能:性能事件采样:可以采样各种硬件性能事件,如CPU周期、缓存命中率、指令......
  • Kafka Topic 中明明有可拉取的消息,为什么 poll 不到
    开心一刻今天小学女同学给我发消息她:你现在是毕业了吗我:嗯,今年刚毕业她给我发了一张照片,怀里抱着一只大橘猫她:我的眯眯长这么大了,好看吗我:你把猫挪开点,它挡住了,我看不到她:你是sb吗,滚我解释道:你说的是猫呀可消息刚发出,就出现了红色感叹号,并提示:消息已发出,但被对方拒收了kafka......