这一章节我们来讨论一下泛型与容器,准确来说是由于容器的需求而产生泛型的需求。
我们平常在编程的时候,大部分都是用了容器来装载对象,我们来看一下容器的演变。
1.普通容器
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
Holder holder = new Holder(new RealObject());
RealObject realObject = holder.getRealObject();
}
}
class RealObject {
static {
System.out.println("loading object");
}
}
class Holder {
private RealObject realObject;
public Holder(RealObject realObject) {
this.realObject = realObject;
}
public RealObject getRealObject() {
return realObject;
}
}
上面的代码展示了能够装载RealObject这个类型对象的 容器,但是由于只是能够存储单一类型,因此实用性比较差。
2.万能容器
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
Holder holder = new Holder(new RealObject());
RealObject realObject = (RealObject) holder.getObject();
Holder holder2 = new Holder(new RealObject2());
RealObject2 realObject2 = (RealObject2) holder2.getObject();
}
}
class RealObject {
static {
System.out.println("loading object");
}
}
class RealObject2 {
static {
System.out.println("loading object2");
}
}
class Holder {
private Object object;
public Holder(Object object) {
this.object = object;
}
public Object getObject() {
return object;
}
}
我们修改一下上面的代码,把holder装载的类型改成Object,这个时候Holder可以装载任何的类型对象的容器。
虽然上面的容器是万能,但是一般编程的时候是不会用到各种类型的对象,大部分的时候是存储单一类型的对象,而且,在使用的过程中需要强制转换,这个是一个大问题,因为不一定知道需要转换对象的类型,因此,需要引入泛型。
3.泛型容器
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
Holder<RealObject> holder = new Holder<RealObject>(new RealObject());
RealObject realObject = (RealObject) holder.getObject();
Holder<RealObject2> holder2 = new Holder<RealObject2>(new RealObject2());
RealObject2 realObject2 = (RealObject2) holder2.getObject();
}
}
class RealObject {
static {
System.out.println("loading object");
}
}
class RealObject2 {
static {
System.out.println("loading object2");
}
}
class Holder<T> {
private T object;
public Holder(T object) {
this.object = object;
}
public Object getObject() {
return object;
}
}
我们再次修改容器,引入泛型特性,这个时候容器基本满足需求,而且在编译的过程中也可以进行类型检查,保证类型的正确性。
4.泛型的核心概念
就是我告诉编译器我想使用什么类型的容器,然后编译器就会根据需要处理一些细节(例如:类型检测)
总结:这一章节主要讲述容器的演变,以及泛型与容器的关系。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
Java 泛型编程是Java语言在JDK 1.5版本引入的一项重要特性,它极大地提高了代码的安全性和可重用性。泛型本质上是参数化类型,允许我们在编写代码时,将数据类型作为参数,这使得类、接口和方法能够处理多种不同的...
泛型是Java语言的一个重要特性,首次出现在Java SE 1.5版本中。它的引入主要是为了解决在集合操作中类型安全性的问题,并通过引入参数化类型的概念,提高了代码的复用性与可读性。 ### 泛型概念 泛型,即参数化...
日常笔记-JAVA泛型
Java泛型与容器详细笔记涉及到Java编程语言中的两个重要概念:泛型(Generics)和容器(Containers)。容器主要包括Java集合框架中的各类集合类,如List、Set、Map等,它们用于存储和操作数据。泛型则提供了一种类型...
而不是创建一个Object列表,你可以参数化java.util.List来创建一个String String列表,如下所示:当通过反射在运行时检查可参数化类型本
在Java编程语言中,泛型和反射是两个非常重要的特性,它们在软件开发中有着广泛的应用。本篇文章将深入探讨这两个概念以及它们在实际开发中的小运用。 首先,我们来看泛型(Generics)。泛型是在Java SE 5.0引入的...
泛型接口与泛型类类似,只是它们定义了一组方法但不提供实现,如: ```csharp public interface IComparer<T> { int Compare(T x, T y); } ``` **泛型委托和泛型事件** 泛型委托类似于函数指针,允许我们传递...
Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
泛型是Java SE 5.0引入的新特性,主要用于集合框架,它可以限制容器中存储的数据类型,确保在编译时就能检测出错误,而不是等到运行时。泛型使用尖括号`<>`表示,如`List<String>`。 2. 类型参数: 泛型中的`T`、...
java-泛型-面试题.docx
泛型是Java编程中的一个重要概念,它提供了一种在编译时期检查类型安全性的机制,同时也减少了强制类型转换的需要。泛型主要应用于类、接口和方法中,用来限制可以存储或处理的数据类型。 1. **泛型的意义**: - ...
Java反射与泛型是Java编程中的两个重要特性,它们各自为开发者提供了强大的工具来增强代码的灵活性和类型安全性。在本教程中,我们将深入探讨这两个主题,帮助你更好地理解和运用它们。 **Java反射** Java反射机制...
java基础-泛型通配符
Java 泛型是一种强大的特性,它允许在编程时指定容器(如列表、集合或映射)的元素类型,从而提供类型安全性和代码简洁性。在Java中,泛型是通过在类、接口或方法声明中使用类型参数来实现的。这使得开发者能够限制...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
### Java泛型详解 #### 一、什么是泛型? 在Java中引入泛型之前,开发者通常使用`Object`类型的集合来存储多种不同类型的对象。这种方式虽然灵活,但在使用过程中需要频繁进行类型检查或类型转换,这不仅增加了...
Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全性和可读性。泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的...
总结起来,"实例185 - 自定义泛型化数组类"是关于如何利用Java泛型特性创建安全且灵活的数组容器的一个案例。通过理解泛型、数组的限制以及如何结合两者,我们可以编写出更强大、更安全的代码,提升代码的复用性和...