`

java泛型疑惑与讲解

阅读更多
   泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全
和运行时更小地抛出ClassCastExceptions的可能。
   所谓泛型:就是变量类型的参数化。

当没有指定泛型继承的类型或接口时,默认使用T extends Object,所以默认情况下任
何类型都可以作为参数传入。

    使用<?>或是<? extends SomeClass>的声明方式,意味著您只能通过该名称來
取得所参考实例的信息,或者是移除某些信息,但不能增加它的信息,因为只知
道当中放置的是SomeClass的子类,但不确定是什么类的实例,编译器不让您加入
信息,理由是,如果可以加入信息的話,那么您就得記得取回的实例是什么类型,
然后转换为原來的类型方可进行操作,这就失去了使用泛型的意义。
    使用<? super SomeClass>的声明方式,可以增加它的信息,只能放置的是SomeClass类型或SomeClass的子类型,但不放入SomeClass的上一级类型(超类或其实现的接口),因为不能说SomeClass的上一级类型是SomeClass类型,而SomeClass类型和SomeClass的子类型可以说是SomeClass类型。

实例详解:

package com.think.java.container;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class GenericTest<T>   //GenericTest<?>  
//GenericTest<?extends List>  GenericTest<? super List> 都是不正确的
{
private T foo;

public T getFoo()
{
return foo;
}

public void setFoo(T foo)
{
this.foo = foo;
}

public static void main(String[] args)
{
GenericTest<? extends List> ge = null;

ge = new GenericTest<ArrayList>();
ge = new GenericTest<LinkedList>();

// ge.setFoo(new ArrayList());    //不能增加,因为不能确定类型

GenericTest<? super List> ge2 = null;

ge2 = new GenericTest<Object>();
ArrayList li = new ArrayList();   //可以增加List的子类型
li.add("jjsd");
ge2.setFoo(li);

// Object ob = new Object();   //不能增加List的上一级
// ge2.setFoo(ob);
System.out.println(ge2.getFoo());

ge2 = new GenericTest<List>();
List li2 = new ArrayList();   //可以增加List类型
li2.add("jjsd22");
ge2.setFoo(li2);
System.out.println(ge2.getFoo());

GenericTest<String> ge3 = new GenericTest<String>();
ge3.setFoo("hello world");

GenericTest<?> ge4 = ge3;   //等价于    GenericTest<? extends Object> ge4 = ge3;

System.out.println(ge4.getFoo());

ge4.setFoo(null);

System.out.println(ge4.getFoo());

// ge4.setFoo("welcome");    //不能增加,因为不能确定类型


}
}



分享到:
评论

相关推荐

    JAVA基础讲解.zip

    同时,教程和讲解能帮助你解决学习过程中遇到的疑惑,快速找到答案。 总的来说,"JAVA基础讲解.zip"是一个全面的学习资源,覆盖了从入门到进阶的各个环节,对于想要掌握Java编程的人来说,是一份非常宝贵的资料。...

    Java解惑(中文).pdf

    8. **泛型**:Java泛型引入了类型安全,增强了代码的可读性和可维护性。书中会探讨泛型的基本概念,通配符,以及在设计API时如何有效地使用泛型。 9. **模块化系统**:Java 9引入了模块系统(Project Jigsaw),...

    JAVA解惑

    13. **Java泛型**:理解泛型的引入和使用,以及泛型通配符和边界。 14. **枚举和注解**:介绍枚举类型的应用,以及注解的作用和自定义注解。 15. **Java 8新特性**:讲解Lambda表达式、函数式接口、Stream API等...

    Java编程思想 Thinking in Java 课后习题答案

    《Java编程思想》是 Bruce Eckel 的经典著作,它深入浅出地讲解了Java语言的核心概念和编程技术。这本书不仅提供了丰富的理论知识,还包含了大量练习题,旨在帮助读者巩固和提升编程技能。课后习题答案对于学习者来...

    Java语言程序设计进阶篇答案与代码

    这份"Java语言程序设计进阶篇答案与代码"资源将帮助你巩固以上知识点,通过实际代码示例加深理解,解决练习题疑惑,提升编程能力。学习过程中,你可以对照代码理解讲解,结合实际运行结果,加深对Java语言特性的掌握...

    Thinking in Java 4th Edition习题答案

    这本书深入浅出地讲解了Java语言的核心概念和技术,包括面向对象编程、泛型、集合框架、多线程、网络编程等。本书的习题答案是学习过程中不可或缺的参考资料,可以帮助读者检验自己的理解并解决疑惑。 习题解答通常...

    4,JAVA解惑 高清PDF 下载

    《JAVA解惑》是Java开发者领域的一本经典著作,它被广大...总之,《JAVA解惑》是一本涵盖了Java核心知识点、实战技巧和高级特性的宝典,无论你是Java新手还是老手,都能从中受益匪浅,解决你在Java编程中的种种疑惑。

    thinging in java 第四版 英文版

    5. **泛型**:Java 5引入的泛型是一种强大的类型系统增强,它允许在编译时检查容器中的对象类型,减少类型转换的麻烦,提高代码的健壮性。 6. **异常处理**:异常处理是Java编程中的重要部分,书中详细解释了try-...

    think in java 4 练习题答案

    《Think in Java 4》是Java编程领域里一本经典的教程,由Bruce Eckel撰写,它深入浅出地讲解了Java语言的核心概念和技术。本压缩包包含的“练习题答案”无疑是学习过程中的一大辅助资料,可以帮助读者检验自己的理解...

    《Java2实用教程》课后习题参考答案(第三版)

    《Java2实用教程》是Java初学者和进阶者的重要学习资源,由耿祥义编著,本书深入浅出地讲解了Java编程的基础知识和核心概念。课后习题是检验学习成果、巩固知识的关键环节,而《Java2实用教程》课后习题参考答案(第...

    Thinking in Java 4th Edition 中英文 及 习题解答 源代码

    7. **泛型**:Java 5引入的泛型增强了代码的类型安全,减少了类型转换的麻烦,书中的泛型章节让读者掌握这一强大的特性。 8. **反射**:反射机制允许程序在运行时检查和修改自身的行为,是Java中的高级特性,书中...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...

    JAVA解惑.大全和问题解析

    "JAVA解惑.pdf"这本书籍很可能包含了以上这些知识点的详细讲解,通过阅读,读者可以深入理解Java编程的各个方面,解决实际编程中的疑惑,提升编程技能。同时,结合实践,不断总结经验,将有助于成为一名出色的Java...

    Java解惑

    这本书作为Java开发者的参考指南,不仅解答了编程疑惑,还提供了实践经验,对于提升编程技能和解决问题的能力大有裨益。无论你是初学者还是经验丰富的开发者,《Java解惑》都是一本值得拥有的书。

    Java2实用教程(第三版)课后习题参考答案

    2. **面向对象编程**:深入讲解类、对象的概念,类的封装、继承和多态性,接口与抽象类的区别,以及如何使用访问修饰符控制成员的访问权限。 3. **异常处理**:学习如何使用try-catch-finally语句块来捕获和处理...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...

    Java开发实战1200例

    《Java开发实战1200例》是一本深入实践的Java编程书籍,其第Ⅱ卷专注于通过...这些实例是理论知识与实际操作的完美结合,对于初学者和有一定经验的开发者来说,都是宝贵的资源,有助于在实践中不断提高Java技术水平。

    java解惑(转)

    在编程实践中,Java开发者经常会遇到各种疑惑和难题,这些问题可能涵盖语法、类库使用、内存管理、多线程、异常处理等多个方面。这篇博客或文档可能就是为了帮助开发者解决这些困扰,提高编程效率。 【描述】提到的...

Global site tag (gtag.js) - Google Analytics