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

Java的泛型

时间:2024-11-04 11:18:41浏览次数:7  
标签:Box box Java 类型 参数 泛型 public

Java 的泛型(Generics)是一种编程技术,它允许类、接口和方法在定义时使用参数化类型。通过泛型,可以编写更加通用和类型安全的代码。以下是 Java 泛型的一些关键知识点:

1. 泛型类(Generic Class)

  • 定义泛型类时,使用尖括号 <> 来声明类型参数。例如:
    public class Box<T> {
        private T t;
    
        public void set(T t) { this.t = t; }
        public T get() { return t; }
    }
    
  • 这里的 T 是一个类型参数,可以在实例化类时指定具体的类型。例如:
    Box<Integer> integerBox = new Box<>();
    

2. 泛型方法(Generic Method)

  • 泛型方法可以在普通类中定义,使用类型参数来指定方法的参数或返回值类型。例如:
    public <T> T genericMethod(T[] array) {
        return array[0];
    }
    
  • 调用时,编译器会根据传入的参数推断类型参数。

3. 泛型接口(Generic Interface)

  • 泛型接口的定义与泛型类类似,可以包含类型参数。例如:
    public interface Pair<K, V> {
        K getKey();
        V getValue();
    }
    
  • 实现接口时可以指定具体的类型参数。

4. 类型参数的约束(Bounded Type Parameters)

  • 可以使用 extends 关键字对类型参数进行约束,限制其必须是某个类或接口的子类型。例如:
    public class Box<T extends Number> {
        private T t;
        // ...
    }
    
  • 这里的 T 必须是 Number 或其子类,如 IntegerDouble 等。

5. 通配符(Wildcards)

  • 通配符 ? 用于表示未知类型,常用于泛型方法的参数中。例如:
    public void printList(List<?> list) {
        for (Object elem : list) {
            System.out.println(elem);
        }
    }
    
  • 通配符可以有上下界约束,如 <? extends T> 表示上限为 T<? super T> 表示下限为 T

6. 类型擦除(Type Erasure)

  • Java 的泛型是编译时特性,编译后的字节码中类型参数会被擦除,替换为实际的类型(或 Object),并在必要时插入类型转换代码。例如:
    Box<Integer> box = new Box<>();
    box.set(123);
    Integer i = box.get();
    
  • 编译后,类型参数 Integer 会被擦除,实际运行时类似如下代码:
    Box box = new Box();
    box.set(123);
    Integer i = (Integer) box.get();
    

7. 泛型的限制

  • 不能实例化类型参数,例如 new T() 是不允许的。
  • 不能使用基本类型(如 int)作为类型参数,必须使用包装类(如 Integer)。
  • 不能创建泛型类型的数组,例如 new T[10] 是不允许的。

8. 泛型的多态性

  • 泛型类和接口可以继承或实现其他泛型类或接口,从而形成泛型多态性。例如:
    public class OrderedPair<K, V> implements Pair<K, V> {
        private K key;
        private V value;
        // ...
    }
    

总结

Java 泛型提供了强大的类型安全性和代码复用性。通过泛型,可以编写更加通用、类型安全的代码,减少类型转换和运行时错误。理解泛型的核心概念(如类型参数、约束、通配符和类型擦除)是掌握泛型编程的关键。

标签:Box,box,Java,类型,参数,泛型,public
From: https://blog.csdn.net/2301_77006130/article/details/143480210

相关文章

  • 泛型数组列表_演练
    ex1:基础练习基础练习请尽量独立完成(不要借助AI,实在不会才看参考代码)。原始数组学生类:packageex1;publicclassStudent{protectedStringname;protectedintscore;publicStudent(Stringname,intscore){this.name=name;this.sc......
  • Java面试系列-Java并发面试题20道,结合手撕Java系列学习效果更佳,知识点更深入
    文章目录1.什么是线程安全?2.解释下Java中的Thread类和Runnable接口的区别。3.Java中的synchronized关键字有哪些特性?4.volatile关键字的作用及限制是什么?5.解释Java内存模型(JMM)。6.Java中如何实现线程间通信?7.AQS(AbstractQueuedSynchronizer)的工作原理是什么?8.......
  • 第一章 JavaScript基础
    1.什么是JavaScriptJavaScript是一种基于对象和事件驱动的、并具有安全性能的脚本语言JavaScript特点向HTML页面中添加交互行为脚本语言,语法和Java类似解释性语言,边执行边解释JavaScript组成ES基础语法DOM操作HTML元素BOM操作浏览器前进,后退,刷新2.JavaScrip......
  • JavaScript(事件监听,点击事件,事件类型:鼠标事件mouseenter,mouseleave,焦点事件focus,blur,
    事件监听目标:能够给DOM元素添加事件监听什么是事件?事件是在编程时系统内发生的动作或者发生的事情比如用户在网页上单击一个按钮什么是事件监听?就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为绑定事件或者注册事件比如鼠标经过显示下拉菜......
  • Java 基础知识(一)
    java分为两种数据类型:1、基本数据类型;2、引用数据类型(String和我们创建的所有的类)在面向对象的世界里,变量是没有市场的,Carc=newCar()里的c这种变量被称为引用;调用时直接输入方法是不行的,必须用对象或者引用"."这样的形式调用(.表示调用“.”可以翻译成“的”);类......
  • Java 发送邮件功能的实现与实践
    邮件发送的背景和重要性在交付型项目中,消息提醒系统扮演着至关重要的角色,直接影响到甲方的验收标准。四大消息系统的实现是项目成功的关键,它们分别是:邮件提醒:作为最传统且广泛使用的通知方式,邮件提醒能够有效传达重要信息,确保用户及时获取项目进展、关键事项和紧急通知。......
  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现八
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下,快递柜......