一:
受限制的类型参数
泛型机制允许开发者对类型参数进行附加约束(T extends List............)
public class ListGenericFoo<T extends List> {
private T[] fooArray;
public T[] getFooArray() {
return fooArray;
}
public void setFooArray(T[] fooArray) {
this.fooArray = fooArray;
}
public static void main(String[] args) {
ListGenericFoo<LinkedList> foo1 = new ListGenericFoo<LinkedList>();
ListGenericFoo<ArrayList> foo2 = new ListGenericFoo<ArrayList>();
LinkedList[] linkedList = new LinkedList[10];
foo1.setFooArray(linkedList);
ArrayList[] arrayList = new ArrayList[10];
foo2.setFooArray(arrayList);
//HashMap不是List的子类或者实现类
//ListGenericFoo<HashMap> foo3=new ListGenericFoo<HashMap>();
}
}
二:
自己实现一个简单的集合
//自己实现一个简单的集合
public class SimpleCollection<T extends Object> {
private T[] objArr;// 数组
private int index = 0;
public SimpleCollection() {
objArr = (T[]) new Object[10];// 初始化这个数组...默认大小为10
}
public SimpleCollection(int capacity) {
objArr = (T[]) new Object[capacity];// 给定大小初始化数组
}
// 添加一个元素
public void add(T t) {
objArr[index] = t;
index++;
}
// 获取集合中有多少元素
public int getLength() {
return index;
}
// 获取指定的元素
public T get(int i) {
return objArr[i];
}
//获取此集合的大小
public int size(){
return objArr.length;
}
public static void main(String args[]) {
SimpleCollection<Integer> c = new SimpleCollection<Integer>();
for (int i = 0; i < 10; i++) {
System.out.println("<<<<<<<<<<<<<<<<<<<<<<"+c.getLength());
System.out.println(">>>>>>>>>>>>>>>>>>>>>>"+c.size());
c.add(new Integer(i));// 自动装箱与自动拆箱
}
for (int i = 0; i < 10; i++) {
System.out.println(c.get(i));
}
}
}
三:
灵活应用,思路清晰!!!
四:
通过引入泛型,我们将获得编译时类型的安全和运行时更小地抛出ClassCastExceptions的可能。
五:
GenericTest.java中的问题:》》》》》》》》》》》》》》》》》》重点理解!!!!!!!!
使用<?>或是<? extends SomeClass>的声明方式,意味著您只能通过该名称來取得所参考实例的信息,
或者是移除某些信息(设置为null),但不能增加它的信息,因为只知道当中放置的是SomeClass的子类,
但不确定是什么类的实例,编译器不让您加入信息,理由是,如果可以加入信息的話,那么您就得記得取回的实例是什么类型,
然后转换为原來的类型方可进行操作,这就失去了使用泛型的意义。
public class GenericTest<T> {
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=new GenericTest<HashMap>();//把它限制了
GenericTest<?> g = null;
g = new GenericTest<HashMap>();
GenericTest<? super List> ge2 = null;// 这个啥意思...List以及List上面的!!!
ge2 = new GenericTest<Object>();
// ge2=new GenericTest<ArrayList>();//把它限制了
GenericTest<String> ge3 = new GenericTest<String>();
ge3.setFoo("hello world");
GenericTest<? extends Object> ge4 = ge3;
System.out.println(ge4.getFoo());
ge4.setFoo(null);//只能设置为null,不能设置为其他值...注意...
// 因为你不知道是什么类型,如果你知道是什么类型,那就失去泛型类型参数化的意义了!
System.out.println(ge4.getFoo());
// ge4.setFoo("welcome");//这里为什么不行???重点理解!!!!!!
}
}
六:
泛型类的继承
泛型类实现泛型接口
补充问题:我现在总结的一点小结论
1.在创建一个类的时候用T(绝对不可以使用?)
2.?可以在实例化对象和方法(参数)中使用
分享到:
相关推荐
讲:陈冬 第一课:计算机中的环境变量 第二课:认识JVM 安装JDK 第三课:认识JAVA中的变量 第三课:理解类与对象 第三课附加:值传递和对象传递 第四课:继承 ...第十二课:jdbc 第十三课:设计模式
在第12章“泛型1”中,主要探讨了泛型的概念以及它们如何解决在使用集合时遇到的问题。 在没有泛型的情况下,例如存储调料的瓶子如果没有标签,我们很难区分装了什么调料,这可能导致混淆和错误。同样地,Java集合...
JAVA语言与编程第7章容器和泛型.ppt
Java泛型与集合是Java编程中的重要组成部分,它们在提高代码可读性、安全性以及减少类型转换错误方面起到了关键作用。本章将深入探讨这两个概念及其应用。 首先,理解Java集合框架的结构至关重要。Java集合框架包括...
第一天:数据类型第2天:操作员第3天:条件语句简介第四天:课堂与实例第五天:循环第6天:让我们回顾一下第7天:阵列第8天:字典和地图第9天:递归3 第10天:二进制数第11天:2D阵列第十二天:继承第13天:抽象课...
根据Kiseon Paik的Live Java Study课程进行的个人学习 第一周:什么是JVM,Java代码...第十周:多线程编程 第11周的任务:枚举 第12周的作业:注释 第13周的挑战:I / O 第14周的任务:泛型 第15周的任务:Lambda表达
031218_〖第12章:JAVA IO〗_实例操作—单人信息管理程序笔记.pdf 031219_〖第12章:JAVA IO〗_实例操作:投票程序笔记.pdf 031301_【第13章:Java类集】_认识类集、Collection接口笔记.pdf 031302_【第13章:Java类...
#### 二十二、如何:显式实现接口成员 - **实现步骤**:展示如何在类中显式实现接口成员。 #### 二十三、如何:使用继承显式实现接口成员 - **继承示例**:展示如何在一个继承自其他类的新类中显式实现接口成员。 ...
* 第12章:表达式、语句和简单语句 * 第13章:基本流程控制语法 * 第14章:协程、延迟函数调用、以及恐慌和恢复 * 第15章:Go类型系统概述 - 精通Go编程必读 * 第16章:指针 * 第17章:结构体 * 第18章:值部 - 为了...
- **第12章:泛型**:泛型的定义、使用和泛型类与方法的创建。 - **第13章:额外的OOP 技术**:涵盖了接口、继承和多态等面向对象的高级特性。 - **第14章:C#语言增强**:讨论了C# 5.0和更高版本中引入的语言特性,...
在本教程中,宋红康老师讲解了Java编程的相关知识点,尤其强调了泛型的使用。泛型是Java中一种强大的类型系统工具,允许在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 首先,...
本课程从零开始,以通俗易懂...3.泛型简介 4.泛型类 5.泛型接口 6.泛型方法 7.泛型特性 8.内部类简介 9.成员内部类、局部内部类、静态内部类、匿名内部类 教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!
Java中的泛型是一种强大的工具,它允许我们在编程时指定集合(如List、Set、Map等)的元素类型,从而提供类型安全性和编译时的错误检查。在标题和描述中,我们关注的是“泛型集合”这个主题,它是Java集合框架的一...
在C#开发中,必不可少的要用到泛型。泛型是.NET2.0版本就有的,它广泛应用于C#框架中容器的使用中。下面我们来详细介绍一下。 一、泛型的主要优势 1.... 2.... 3.... 二、泛型的基本使用 ... //去除第一个元素12 拆
《Java开发实战经典》是许多Java初学者的重要学习资料,其第十二章涵盖了诸多关键知识点。这章可能涉及了面向对象编程的深入理解、异常处理、集合框架的使用、多线程、网络编程或者IO流等内容。课后习题通常用于巩固...
尚硅谷_JavaSE_第12章_集合与泛型_扩展练习_附带参考答案.md
本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...