`
李灵晖-raylee
  • 浏览: 135722 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-9.1 类型安全的容器

 
阅读更多

这一章节我们来简单说一下类型安全的容器。

说到类型安全,不得不说的是泛型,当然,我们在这里只是简单的介绍一下泛型怎么使用,后面的章节会继续展开。

1.怎么才算类型安全?

一个反例:

package com.ray.ch09;

import java.util.ArrayList;

public class Test {
	private ArrayList fruitList = new ArrayList();

	public void addOrange(Orange orange) {
		fruitList.add(orange);
	}

	public void addApply(Apple apple) {
		fruitList.add(apple);
	}

	public static void main(String[] args) {
		Test test = new Test();
		for (int i = 0; i < 5; i++) {
			test.addApply(new Apple());
		}
		for (int i = 0; i < 10; i++) {
			test.addOrange(new Orange());
		}

	}

}

class Apple {
}

class Orange {
}


从上面的代码可以看见fruitList里面即装了Orange,也装了Apply,那么当我们需要get出来的时候,我们只是get出来一个Object,这就会遇到一个问题,到达转换成Apply还是Orange,如果转型错误,那么运行时将抛异常。

因此,如果想把代码编程类型安全,那么就需要运用泛型,每一个List限定了放入的对象。

package com.ray.ch09;

import java.util.ArrayList;

public class Test {
	private ArrayList<Apple> applyList = new ArrayList<Apple>();
	private ArrayList<Orange> orangeList = new ArrayList<Orange>();

	public void addOrange(Orange orange) {
		orangeList.add(orange);
	}

	public void addApply(Apple apple) {
		applyList.add(apple);
	}

	public static void main(String[] args) {
		Test test = new Test();
		for (int i = 0; i < 5; i++) {
			test.addApply(new Apple());
		}
		for (int i = 0; i < 10; i++) {
			test.addOrange(new Orange());
		}

	}

}

class Apple {
}

class Orange {
}


新的代码里面每一个list只能放置特定的对象,所以不会出现类型安全的问题。

而上面所使用的就是泛型,把类型给限定了。这样在运行的时候就不会出现转型异常。

2.对于可以向上转型的对象,如果是继承同一个类或者实现同一个接口,那么也可以放在同一个泛型list里面。

package com.ray.ch09;

import java.util.ArrayList;

public class Test {
	private ArrayList<Apple> applyList = new ArrayList<Apple>();

	public void addApple(Apple apple) {
		applyList.add(apple);
	}

	public static void main(String[] args) {
		Test test = new Test();
		for (int i = 0; i < 5; i++) {
			test.addApple(new Gala());
			test.addApple(new Fuji());
		}
	}

}

class Apple {
}

class Gala extends Apple {
}

class Fuji extends Apple {
}


package com.ray.ch09;

import java.util.ArrayList;

public class Test {
	private ArrayList<CanSwim> swimList = new ArrayList<CanSwim>();

	public void add(CanSwim canSwim) {
		swimList.add(canSwim);
	}

	public static void main(String[] args) {
		Test test = new Test();
		for (int i = 0; i < 5; i++) {
			test.add(new Person());
			test.add(new Fish());
		}
	}

}

interface CanSwim {
}

class Person implements CanSwim {
}

class Fish implements CanSwim {
}


总结:这一章节讨论了怎样才是类型安全,然后类型安全的注意点。

这一章节就到这里,谢谢。

-----------------------------------

目录

分享到:
评论

相关推荐

    mchange-commons-java-0.2.11.zip

    在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...

    eclipse-java-2021-12-R-win32-x86_64.zip

    用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...

    api-ntrip-java-client-master.zip_android_ntrip_ntrip java实现_ntr

    标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...

    aip-java-sdk-4.2.0

    标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...

    java-多文件上传dome

    在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。

    aspose-words-java-23.6-jdk17.jar.zip

    【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...

    手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip

    【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...

    _Java-集合容器-2.List及其实现类.ppt

    在Java编程中,集合容器是数据管理的重要组成部分,它们提供了灵活且高效的方式来存储和操作对象。List接口是Java集合框架中的核心接口之一,它继承自Collection接口,并具有特定的特性:元素可以重复,保持元素的...

    java-Swing外观包

    Java Swing是Java GUI(图形用户界面)开发的一个重要组件,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。Swing提供了丰富的组件库,允许开发者创建美观且功能丰富的交互式用户界面。在这个...

    Java---笔试题大全

    2. **String类型**:String不是Java的基本数据类型,而是对象。基本数据类型包括byte、int、char等。String是final类,不能被继承。在效率和内存管理上,如果需要频繁修改字符串,应使用`StringBuilder`或`...

    java-lib

    2. **数据库操作**:JDBC(Java Database Connectivity)是Java标准的数据库连接库,允许程序与各种类型的数据库进行交互。除此之外,还有像Hibernate和MyBatis这样的对象关系映射(ORM)框架,它们简化了SQL查询,...

    java-sdk-master.zip_leancound集成第三方插件_即时通讯

    Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时。在这个名为"java-sdk-master.zip"的压缩包中,包含的是Leancound的Java SDK,这是一个专为集成Leancound服务而设计的开发工具包。Leancound是...

    活字格-表格选择项容器.zip

    开发者可以引用这个DLL来集成选择项容器功能到他们的应用程序中,无需从头编写相关代码。 2. **PluginConfig.json**:这是一个配置文件,用于定义插件的设置和行为。在活字格这样的开发环境中,PluginConfig.json...

    curso-java-pildorasInf:从头开始学习Java

    【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...

    使用渲染脚本实现模糊视图背景 - Java - 下载.zip

    在Java开发中,创建具有模糊效果的视图背景可以提升应用程序的用户体验,使其看起来更加现代和精致。"使用渲染脚本实现模糊视图背景"是一个常见的技术实践,它通常涉及到图形处理和用户界面的设计。在这个项目中,...

    ks-java-lib:包含 Java 的 KS 库

    【标题】"ks-java-lib:包含 Java 的 KS 库" 提供的是一个专门为 Java 开发者设计的库,它扩展了 Java 的功能,为开发者在处理特定任务时提供了便利。这个库可能包含了丰富的类和方法,旨在简化开发过程,提高代码的...

    java-pdf&word-jar.zip

    Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...

    Free Spire.Doc for Java - 3.9 无水印

    **Free Spire.Doc for Java - 3.9 无水印** `Free Spire.Doc for Java` 是一款专为Java开发者设计的文档处理库,它允许用户在Java应用程序中创建、编辑和转换Microsoft Word文档。这个3.9版本提供的是无水印版本,...

Global site tag (gtag.js) - Google Analytics