Java泛型介绍

        Java泛型是一种强大的语言特性,它使得代码更加灵活、类型安全,并且提高了代码的重用性。本文将深入探讨Java泛型的原理、应用以及桥接(Bridge)等知识点。

1. 泛型的原理

        Java泛型的原理基于类型擦除(Type Erasure)机制。在编译时,Java泛型的类型信息会被擦除,替换为原始类型(raw type)。这意味着在运行时,泛型类型参数信息不再可用,而只是原始类型的操作。通过类型擦除,Java实现了泛型的兼容性,使得原始Java代码能够与新版的泛型代码互相操作。

2. 泛型的应用

2.1 类泛型

public class Box<T> {

private T value;

public void setValue(T value){

this.value = value;

}

public T getValue() {

return value;

}

}

类泛型允许我们在编写类时定义一个或多个类型参数,使得类中的方法或成员变量可以使用这些类型参数。通过泛型,我们可以创建更加灵活的数据结构,例如上述的Box类可以存储任意类型的对象。

2.2 方法泛型

public class Utils {

public static <T> T add(T a, T b) {

return a + b;

 }

}

方法泛型允许我们在方法声明中定义类型参数,从而实现方法的参数类型和返回类型可以是泛型类型。这样的方法在调用时可以根据实际的类型来进行参数推断,提高了代码的灵活性和复用性。

3. 泛型桥接(Bridge)

泛型桥接是Java编译器为了保持原始Java代码与泛型代码的兼容性而引入的机制。在Java中,由于类型擦除的存在,泛型类型的继承关系会被擦除为原始类型的继承关系。为了保持编译后的字节码与原始Java代码兼容,编译器会自动生成桥接方法

public class Node<T> {

private T data;

public void setData(T data) {

this.data = data;

}

public T getData() {

return data;

}

}

public class MyNode extends Node<Integer> {

@Override

public void setData(Integer data) {

// 在编译后会生成一个桥接方法,桥接方法的参数类型为Object

super.setData(data);

}

}

Java泛型是Java编程语言中的一个重要特性,它通过类型擦除实现了在编译时的类型安全检查,并且通过泛型桥接保持了与原始Java代码的兼容性。合理地应用泛型能够使得代码更加灵活、类型安全,并且提高代码的重用性,是Java编程中不可或缺的一部分。

4. 泛型擦除

是Java泛型特性的一种实现机制。在Java编译器处理泛型代码时,会将泛型类型信息在编译期间擦除,这意味着编译后的字节码中不再包含泛型类型的信息,而是使用原始类型来代替。这种擦除机制是为了保持与原始Java代码的兼容性,并且能够在运行时节省内存和提高性能。

类型参数擦除:在编译期间,所有的泛型类型参数都会被擦除为它们的上限边界(通配符<?>的类型参数会被擦除为Object)。例如,List<String>和List<Integer>在编译后都会变成List。

泛型类、接口和方法的擦除:泛型类、接口和方法中的泛型信息也会被擦除。这意味着在编译后,泛型类、接口和方法中的泛型类型将被替换为它们的原始类型。

桥接方法的生成:在泛型类或接口的子类中,如果重写了泛型类或接口的方法,编译器会生成桥接方法以保持多态性。这些桥接方法使用了原始类型作为参数或返回类型,从而使得编译后的字节码能够与原始的非泛型代码兼容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容

  • 1. 为什么需要泛型 2. 泛型类型 2.1. 泛型类 2.2. 泛型接口 3. 泛型方法 4. 类型擦除 5. ...
    昵称有多帅阅读 570评论 0 2
  • 开发人员在使用泛型的时候,很容易根据自己的直觉而犯一些错误。比如一个方法如果接收List作为形式参数,那么如果尝试...
    时待吾阅读 1,034评论 0 3
  • 泛型概述 Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(t...
    billy_success阅读 435评论 0 1
  • 什么是泛型 Java泛型( generics) 是JDK 5中引⼊的⼀个新特性, 允许在定义类和接口的时候使⽤类型...
    西界__阅读 249评论 0 1
  • 概述 泛型的本质是参数化类型,通常用于输入参数、存储类型不确定的场景。相比于直接使用 Object 的好处是:编译...
    彳亍口巴阅读 124评论 0 3