`

java简介以及了解java(三二)

阅读更多

java5.0中的泛型
说明
增强了java的类型安全,可以在编译期间对容器内的对象进行类型检查,在运行期不必进行类型的转换。而在java se5.0之前
必须在运行期动态进行容器内对象的检查及转换,泛型是编译时概念,运行时没有泛型
减少含糊的容器,可以定义什么类型的数据放入容器
List<Integer> aList = new ArrayList<Integer>();
aList.add(new Integer(1));
// ...
Integer myInteger = aList.get(0);
支持泛型的集合,只能存放制定的类型,或者是指定类型的子类型。
我们可以看到,在这个简单的例子中,我们在定义aList的时候指明了它是一个只接受Integer类型的ArrayList,当我们调
用aList.get(0)时,我们已经不再需要先显式的将结果转换成Integer,然后再赋值给myInteger了。而这一步在早先
的Java版本中是必须的。也许你在想,在使用Collection时节约一些类型转换就是Java泛型的全部吗?远不止。单就这个例
子而言,泛型至少还有一个更大的好处,那就是使用了泛型的容器类变得更加健壮:早先,Collection接口
的get()和Iterator接口的next()方法都只能返回Object类型的结果,我们可以把这个结果强制转换成任何Object的子类,而
不会有任何编译期的错误,但这显然很可能带来严重的运行期错误,因为在代码中确定从某个Collection中取出的是什么类
型的对象完全是调用者自己说了算,而调用者也许并不清楚放进Collection的对象具体是什么类的;就算知道放进去的对
象“应该”是什么类,也不能保证放到Collection的对象就一定是那个类的实例。现在有了泛型,只要我们定义的时候指明
该Collection接受哪种类型的对象,编译器可以帮我们避免类似的问题溜到产品中。我们在实际工作中其实已经看到了太多
的ClassCastException。
用法
声明及实例化泛型类:
HashMap<String,Float> hm = new HashMap<String,Float>();
编译类型的泛型和运行时类型的泛型一定要一致。没有多态。
不能使用原始类型
GenList<int> nList = new GenList<int>(); //编译错误
Java SE 5.0目前不支持原始类型作为类型参数(type parameter)
定义泛型接口:
public interface GenInterface<T> {
void func(T t);
}
定义泛型类:
public class ArrayList<ItemType> { ... }
public class GenMap<T, V> { ... }
例1:

public class MyList<Element> extends LinkedList<Element>
{
public void swap(int i, int j){
Element temp = this.get(i);
this.set(i, this.get(j));
this.set(j, temp);
}
public static void main(String[] args){
MyList<String> list = new MyList<String>();
list.add("hi");
list.add("andy");
System.out.println(list.get(0) + " " + list.get(1));
list.swap(0,1);
System.out.println(list.get(0) + " " + list.get(1));
}
}

 
泛型的通配符"?"
? 是可以用任意类型替代。
<?>泛型通配符表示任意类型
<? extends 类型>表示这个类型是某个类型的子类型,或是某个接口的实现类
<? super 类型>表示这个类型是某个类型的父类型。
例:泛型通配符、带范围的泛型通配符

import java.util.*;
import static java.lang.System.*;
public class TestTemplate {
/**
* @param args
*/
public static void main(String[] args) {
List<String> l1=new ArrayList<String>();
l1.add("abc");
l1.add("def");
List<Number> l2=new ArrayList<Number>();
l2.add(1.3);
l2.add(11);
List<Integer> l3=new ArrayList<Integer>();
l3.add(123);
l3.add(456);
// print(l1);
print(l2);
print(l3);
}
static void print(List<?> l//泛型通配符){
//所有Comparable接口的实现类可以作为泛型参数

for(Object o:l){
out.println(o);
}
}
static void print(List<? extends Number> l//带范围的泛型通配符){
//所有Number的子类可以作为泛型参数
for(Object o:l){
out.println(o);
}
}
static void print(List<? extends Comparable> l){
//所有Comparable接口的实现类可以作为泛型参数
for(Object o:l){
out.println(o);
}
}
static void print(List<? super Number> l){
//所有Number的父类可以作为泛型参数
for(Object o:l){
out.println(o);
}
}
}

 

"?"可以用来代替任何类型, 例如使用通配符来实现print方法。
public static void print(GenList<?> list) {})

分享到:
评论

相关推荐

    java8_32.zip

    要深入了解Java 8,可以参考官方文档、教程以及各种在线课程,如Oracle官方教程、Stack Overflow问答、GitHub上的开源项目等,不断提升对Java 8新特性的理解和应用能力。 总之,Java 8的推出极大地推动了Java语言的...

    Java 第1章 了解java含源代码

    在“Java 第1章 了解java含源代码”中,我们将会探讨Java的基础知识,包括它的历史、特性、语法以及如何阅读和理解Java源代码。 1. **Java的历史**:Java的诞生源于C++,由James Gosling领导的团队开发,旨在创造一...

    java1.8-32.rar

    Java开发工具包(Java ...对于初学者,了解并掌握这些JDK1.8的关键特性以及如何正确安装和配置环境变量,是学习Java编程的基础。熟练运用这些特性可以提升代码质量和开发效率,使得Java应用程序更具现代化和高性能。

    1-Java简介以及开发环境安装1

    Java简介及开发环境安装 Java是一种广泛使用的高级编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)于1995年发布。它设计的初衷是实现“一次编写,到处运行”的跨平台能力,通过Java虚拟机(JVM)...

    JAVA简介以及语言基础

    Java入门的基础资料,了解Java 语言 ; 了解Java 程序的类型 ; 掌握Java 程序运行环境的配置 ; 理解Java 虚拟机 (JVM); 了解Java的特点

    java7 32+64位安装包下载

    1. **JRE(Java Runtime Environment)**:JRE是Java应用程序执行所需的核心组件,包括Java虚拟机(JVM)、Java类库以及相关的配置文件。32位和64位版本的区别在于它们分别对应于不同的操作系统架构,32位适用于32位...

    Java 简介.ppt

    了解Java 语言 了解Java 程序的类型 掌握Java 程序运行环境的配置 理解Java 虚拟机 (JVM) 了解Java的特点

    Java核心编程Java 课件ppt

    1. **Java简介**:Java是由Sun Microsystems开发的,后来被Oracle公司收购。它被设计成“一次编写,到处运行”,这意味着编写的代码可以在任何支持Java的平台上运行,无需重新编译。 2. **Java环境搭建**:学习如何...

    linuxJava8_32.tar.zip

    标题“linuxJava8_32.tar.zip”表明这是一个专为32位Linux系统设计的Java Development Kit (JDK) 1.8版本的压缩文件,它已经通过zip工具进行了压缩。描述中提到,用户在下载这个文件后,会得到一个名为“linuxJava8_...

    Core Java学习1(java简介与发展史)

    Java简介与发展史 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems的詹姆斯·高斯林(James Gosling)在1995年发布。它以其“一次编写,到处运行”(Write Once, Run Anywhere)的理念而闻名,因为它...

    Java7 32位

    Java 7,也被称为Java SE 7 (Java Platform, Standard Edition 7),是Java编程语言的一个重要版本,由Oracle公司发布。这个版本在2011年推出,引入了...同时,压缩包内的文件提供了安装和了解Java 7所需的基本信息。

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    Java虚拟机规范.Java SE 8版.zip

    书中基于全新Java SE 8,完整且准确地阐述Java虚拟机规范,是深度了解Java虚拟机和Java语言实现细节的必读之作。 《Java核心技术系列:Java虚拟机规范(Java SE 8版)》共分7章。第1章从宏观的角度介绍了Java虚拟机...

    国二java考试系统

    5. **多线程**:Java支持多线程编程,考生需要了解Thread类和Runnable接口,以及同步机制如synchronized关键字和wait/notify方法。 6. **图形用户界面GUI**:Java提供了Swing和JavaFX等库来创建图形用户界面,考生...

    java 17 window 安装包

    让我们深入了解一下Java 17以及如何在Windows系统上进行安装。 Java 17,正式命名为Java SE 17 (Standard Edition),是Oracle公司推出的最新长期支持版(LTS),意味着它将获得至少五年的技术支持,包括安全更新和...

    JavaService-2.0.10 32位,64位

    首先,我们需要了解JavaService的工作原理。它主要通过一个名为`JavaService.exe`的可执行文件作为代理,这个代理程序与Java虚拟机(JVM)进行交互,管理Java应用程序的生命周期。当服务启动时,JavaService会加载...

    14.java集合转换(了解).zip

    14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合...

    Java8 jdk安装包

    本文将详细讲解Java8的安装过程以及其关键特性。 首先,让我们了解如何安装Java Development Kit (JDK)。JDK是Java开发的基础,包含了编译器、调试工具和其他必要的库。在Windows系统中,Java8的安装通常涉及以下...

    java语言简介

    程序设计语言 了解Java平台特性 了解Java集成开发环境 使用Eclipse开发Java应用 了解Java程序结构组成 常见问题

    Java 汇总学习简介

    Java 汇总学习简介 Java 作为一种广泛使用的高级编程语言,其学习涵盖了许多方面。在深入探讨之前,我们先来了解一下 Java 的基本课程,包括 SL110、SL275 和 SL285,这些课程通常由 SUN 公司提供,旨在帮助初学者...

Global site tag (gtag.js) - Google Analytics