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

从头认识java-12.2 Class对象(4)-泛化

 
阅读更多

这一章节我们来讨论一下Class对象的泛化。

1.为什么需要泛化?

代码在编译时就可以进行类型检测,不需要等到运行时才检测类型。

2.例子

package com.ray.ch12;

public class Test {
	public static void main(String[] args) {
		try {
			Class AClass1 = Class.forName("com.ray.ch12.A");
			AClass1 = B.class;
			Class<A> AClass2 = (Class<A>) Class.forName("com.ray.ch12.A");
			// AClass2 = B.class;//error
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

class A {
}

class B {
}


上面的例子我们看一下中间的代码,一开始没有使用泛化的时候,B.class可以赋值给AClass1,但是当我们给AClass2泛化的时候,B.class就不可以赋值给AClass2。

但是在运用Class.forName的很多时候我们都不知道类型的,因此都会使用通配符“?”。

3.通配符“?”

package com.ray.ch12;

public class Test {
	public static void main(String[] args) {
		try {
			Class<?> AClass1 = Class.forName("com.ray.ch12.A");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

class A {
}


使用通配符使得代码更加安全,不会出现警告信息。

而且通配符搭配extend,可以把类型的范围圈定在一个区间里面。

package com.ray.ch12;

public class Test {
	public static void main(String[] args) {
		try {
			Class<? extends Father> AClass1 = (Class<? extends Father>) Class
					.forName("com.ray.ch12.Sub");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

class Father {
}

class Sub extends Father {
}


使用泛化主要是为了在编译时能够进行类型检测,不需要到运行时才知道有问题。

总结:这一章节主要介绍了泛化的原因、使用情况以及泛化的通配符。

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

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

目录

分享到:
评论

相关推荐

    mchange-commons-java-0.2.11.zip

    4. **编译后的字节码**:每个Java类都由Java编译器编译成字节码,这是JVM可以理解的语言,允许在任何支持Java的平台上运行。 5. **签名信息**:如果JAR文件是安全签名的,那么会包含数字签名,用于验证文件的完整性...

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

    4. **调试器**:Eclipse 的内置Java调试器是其关键组件之一,它允许开发者设置断点、查看变量值、单步执行代码和分析内存状态,从而有效地定位和解决问题。 5. **插件体系**:Eclipse 的可扩展性是其强大之处。通过...

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

    - **JSON或XML解析**:NTRIP数据可能以这两种格式传输,需要解析成Java对象。 - **Android权限管理**:可能需要获取网络访问权限。 - **线程管理**:网络操作通常在后台线程执行,防止UI阻塞。 - **异步处理**:如...

    aip-java-sdk-4.2.0

    它的存在意味着AIP Java SDK可能使用Log4j来输出调试信息和错误日志。 2. **aip-java-sdk-4.2.0.jar**:这是核心的AIP Java SDK库文件,包含了所有用于与百度AI平台交互的类和方法。开发者需要引入这个jar文件到...

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

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

    java-多文件上传dome

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

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

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

    java-Swing外观包

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

    Java---笔试题大全

    Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。在Java笔试中,这些概念经常被考察。 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,分为过程抽象(方法)和...

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

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

    java-lib

    在Java编程中,库(Library)是预先编写好的代码集合,程序员可以导入并直接使用,无需从头开始编写所有功能。这些库通常以JAR(Java Archive)文件的形式存在,里面封装了类和方法,可供应用程序调用。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版本提供的是无水印版本,...

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

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

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

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

    java-pdf&word-jar.zip

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

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

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

    java-leetcode题解之第21题合并两个有序链表.zip

    标题中的"java-leetcode题解之第21题合并两个有序链表.zip"指的是一个Java编程语言实现的LeetCode算法题解,具体是第21题——“合并两个有序链表”。这道题目要求我们将两个已排序的链表合并为一个新的已排序链表并...

    PyPI 官网下载 | cpp-enum-class-string-idl-0.0.1.tar.gz

    标题中的"PyPI 官网下载 | cpp-enum-class-string-idl-0.0.1.tar.gz"表明这是一个从Python Package Index(PyPI)官方源下载的软件包,名为"cpp-enum-class-string-idl",版本号为0.0.1。PyPI是Python社区用来分发和...

    java-bot:这是一个从头开始编写JavaScript机器人

    7. **命令行接口(CLI)**:如果“java-bot”是一个命令行工具,那么它可能会使用process对象和command-line-args等库来处理命令行参数和输入。 8. **数据处理**:机器人可能需要解析和处理接收到的数据,这可能涉及...

Global site tag (gtag.js) - Google Analytics