`

泛型使用类型通配符

 
阅读更多

具有以下继承关系的三个类

 

Manager继承自Person,CTO继承自Manager

 

 

private void doSome1(){
        Box<CTO> ctoBox = new Box<CTO>();
        Box<? extends Person> personBox = ctoBox;
        //通过personBox引用对象,不能改变对象本身,因为你不知道泛型的具体类型
        //比如本例,真实类型是CTO,但是如果你改变成了Person,其它引用这个对象的地方(ctoBox)就会有问题
        //因为其它地方一直以为真是类型是CTO,但是其实是Person,CTO是Person的字类,比Person拥有更多的信息
        personBox.setData(new Person());
    }

    private void doSome2(){
        Box<Manager> managerBox = new Box<Manager>();
        Box<? super CTO> ctoBox = managerBox;

        //下面的代码只有第一行可以编译通过,通过ctoBox引用对象,当需要改变自身时,只能设置CTO对象
        //因为只能确认所引用的对象是CTO的父类,具体哪个类型并不知道,CTO是最底层的类所以具有最全的信息
        //比如本例,真实的类型是Manager,如果能成功设置成Person,其他应用到的地方就有问题,因为Manager是Person的子类
        //比person拥有更多的信息
        ctoBox.setData(new CTO());
        ctoBox.setData(new Manager());
        ctoBox.setData(new Person());
        ctoBox.setData(new Object());
    }

 

分享到:
评论

相关推荐

    泛型讲解 类型通配符

    4. 泛型方法:使用类型形参定义的方法,例如 `public static void test(List&lt;T&gt; c)`。 泛型的使用: 1. 定义泛型类:`public class Applet&lt;T&gt;{public T info; ...}` 2. 使用泛型类:`Applet&lt;String&gt; applet = new ...

    Generic_3(泛型限定(下限)-泛型限定(上限的体现)-泛型限定(下限的体现)-泛型限定(通配符的体现)-集合查阅的技巧)

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...

    1.泛型类 、通配符的使用、通配符的上限和下限 编写泛型类Stack<E>,该类中定义一个成员变量和如下方法:

    ### 泛型类、通配符的使用及上下限详解 #### 1. 泛型类的概念 在Java中,泛型是一种使代码更加灵活、重用性更强且类型安全的技术。通过使用泛型,我们可以定义类型参数化的类或方法,从而避免了代码重复并且可以在...

    泛型类型转换Demo

    泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法声明中使用类型参数。通过泛型,我们可以创建可以操作多种数据类型的通用代码,同时保持类型安全。例如,`List&lt;String&gt;`和`List&lt;Integer&gt;`就是两个不同的...

    使用通配符简化泛型使用1

    泛型是Java中的一种特性,它允许在类、接口和方法中使用类型参数,以增强类型安全性。泛型的主要目标是确保在编译时就能检测出可能的类型错误,而不是在运行时通过异常来发现。 2. 通配符(Wildcards): 通配符是...

    Java泛型通配符

    泛型是Java SE 5.0引入的一个新特性,它允许在类、接口和方法中使用类型参数,以提高代码的类型安全性和重用性。泛型的主要目标是能够在编译时检查类型安全,并且所有的强制类型转换都是自动和隐式的,提高了代码的...

    泛型&通配符常见面试题总结

    泛型是Java 5引入的一项特性,它允许在类、接口和方法中使用类型参数,以实现更强大的类型检查和编译时安全性。通过泛型,我们可以创建可以处理多种数据类型的通用容器,如ArrayList,其中T代表一个未知的类型。这...

    Java 泛型最全指南(定义和使用+继承泛型类/实现泛型接口+泛型的边界+通配符+类型擦除)

    参数化类型是指在使用泛型类时指定了具体的类型。例如,`List&lt;String&gt;` 是一个参数化类型,`List` 是泛型类,`String` 是具体的类型。 4. 原始类型 原始类型是指参数化类型的泛型类的 Class。例如,`List` 的原始...

    十三、集合进阶 泛型的继承和通配符

    泛型是Java 5引入的一项特性,它允许在类、接口和方法中使用类型参数,从而实现参数化类型。通过使用泛型,我们可以在编译时检查类型,避免了类型转换异常,并提供了更好的编译器帮助,例如自动装箱和拆箱。 1. **...

    Java中泛型通配符的使用方法示例

    Java中泛型通配符的使用方法示例 Java 中泛型通配符的使用方法示例主要介绍了 Java 中...Java 中泛型通配符的使用方法示例可以帮助开发者更好地控制泛型对象的类型和方法参数的类型,从而提高代码的灵活性和可读性。

    Java语言 泛型讲解案例代码 (泛型类、泛型接口、泛型方法、无界及上下限通配符、泛型对协变和逆变的支持、类型擦除 ...)

    类型通配符:展示如何使用类型通配符来增加灵活性,以及如何进行类型边界约束。 泛型接口:演示如何定义和实现泛型接口,并通过示例代码展示泛型接口的应用。 希望这个代码资源能够帮助你更好地理解和应用Java中的...

    java泛型常用通配符实例解析

    限定通配符是指在泛型中使用extends关键字来限定类型的通配符,语法格式为`&lt;? extends E&gt;`,其中E是某个类型的名称。例如,在上述代码中,我们可以使用`Gys&lt;? extends T&gt;`来限定addAll方法的参数类型,表示该方法...

    Java 泛型通配符的一个实例

    * 一个参数通配符的实例 * 说明:对一个包含了数值元素的集合进行汇总运算。在这种情况下,用户并不关心 * 集合中的每一个对象是什么类型,只要它是数值型即可,而且,用户也希望集合中可以 * 存放不同类型的数值...

    实例189 - 使用通配符增强泛型

    实例189 - 使用通配符增强泛型,着重探讨了如何通过通配符来提升泛型的灵活性和可复用性。这个主题与源码理解和工具应用紧密相关。 首先,让我们理解什么是通配符。在Java的泛型中,通配符(Wildcard)是问号(?)...

    Java中泛型的各种使用

    泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法中使用类型参数。类型参数类似于函数参数,但它们代表的是类型而不是值。例如,`List&lt;T&gt;`中的`T`就是一个类型参数,`T`代表某种具体的类型,如`String`、`...

    Java泛型类型擦除后的补偿

    总结来说,Java泛型的类型擦除虽然在运行时消除了类型信息,但通过编译时的类型检查、桥接方法、通配符等补偿机制,仍然实现了强大的类型安全和便利性。开发者应理解这些补偿机制,以便更好地利用Java泛型进行类型...

    Java泛型类型通配符和C#对比分析

    Java中还允许使用类型通配符的上限和下限来约束泛型。例如,`Apple&lt;T extends Number & java.io.Serializable&gt;`声明了一个泛型类`Apple`,它的类型参数`T`必须是`Number`的子类并且实现了`Serializable`接口。这种...

    JDK1.5泛型使用下载

    Java泛型是在JDK 1.5版本中引入的...完成这些练习后,你应该对泛型有深入的理解,包括它们如何提高代码的类型安全性、如何使用通配符以及如何与非泛型代码协作。这些技能对于编写高质量、易于维护的Java代码至关重要。

    Java1.5泛型指南中文版(Java1.5Gene....pdf

    本资源为 Java 1.5 泛型指南中文版的详细笔记,涵盖了泛型的基础知识、泛型类、泛型方法、通配符、擦除和翻译、类型安全、类型参数、实际类型参数、擦除、翻译、转型和 instanceof、数组、Class Literals as Run-...

Global site tag (gtag.js) - Google Analytics