类与方法都可以被范型化。类范型由类名后面跟上一个或几个三角括号包含的类型变量组成。
ArrayList<E> 代表的意思是ArrayList类里存放的数据类型,只能是E类型及其子类,如果不是,编译时会编译不通过。
public E get(int index) 代表的意义是该方法返回的类型是E类型,使用的时候可以直接当做E类型使用。
E是什么类型呢,E可以是任何类型。
例如:只需要存放String类型数据的ArrayList ,可以声明为:
List<String> list = new ArrayList<String>();
package home;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*
* generic 范型的使用
*/
public class GenericTest {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("hello");
//array.add(1); 报错,因为这里已经声明了,array只能存放String,以及其子类类型
for(String a: array){
System.out.println(a);
}
ArrayList<Integer> array2 = new ArrayList<Integer>();
array2.add(1);
array2.add(40);
for(int a: array2){
System.out.println(a);
}
//使用多个范型 Map<String, Date>
Map<String, Date> map = new HashMap<String ,Date>();
map.put("time1", new Date());
map.put("time2", new Date());
map.put("time3", new Date());
for(String key : map.keySet()){
Date date = map.get(key);
System.out.printf("key: %1$s, value :%2$tF %2$sT%n",key ,date);
}
List <Date> datelist = new ArrayList<Date>();
List<Integer> intList = new ArrayList<Integer>();
datelist.add(new Date());
datelist.add(new Date());
intList.add(3);
intList.add(5);
numberList(intList);
dateList(datelist);
}
/*
* 范型通配符
* 通配符的不确定性,通过通配符只能用来进行类型安全检查,而不能用来声明具体的范型
*
* 范型允许使用通配符(?) ,?代表任何数据类型,使用List<?> list ,表示List里可以放任何数据类型,
* ?一般与extends 连用,表示指定类型以及其所有子类
* ?与super连用,表示指定类型以及指定类型的所有父类
*
* List <?> list = new ArrayList<?>(); //编译出错,因为通配符只能用来进行安全检查,这里是作为了声明
* List <? extends Number> list2 = new ArrayList<? extends Number>();
*/
//List <? extends Number> list 用来检查,list里面存放的数据类型必须是Number,以及其子类型
public static void numberList(List <? extends Number> list){
for(Number num: list){
System.out.printf("输出数字:%1$s %n", num);
}
}
public static void dateList(List <? extends Date> list){
for(Date date: list){
System.out.printf("输出日期:%1$tF %1$tT%n", date);
}
}
}
相关推荐
Java 范型Java 范型
### Java范型攻略篇:深度解析与应用 #### 一、引言:Java范型的引入 在Java的发展历程中,范型(Generics)的引入标志着语言设计上的一个重要里程碑。自Java 1.5发布以来,范型成为了Java语言的重要特性之一,极...
Java 泛型是一种在编程中实现强类型检查和减少冗余类型转换的机制,它是在JDK 1.5版本中引入的。泛型的主要目标是提高代码的类型安全性、可读性和重用性,避免在运行时出现类型转换异常。 1. **泛型的基本概念** -...
Java泛型是Java 5版本引入的一个重要特性,极大地增强了代码的类型安全性和效率。泛型允许我们在编写类、接口和方法时指定一种或多种类型参数,使得代码能够处理多种不同类型的对象,同时在编译时进行严格的类型检查...
Java泛型是Java 5版本引入的一个重要特性,极大地增强了代码的类型安全性和可读性。泛型允许我们在编写代码时指定容器(如List、Set、Map等集合类)能够存储的数据类型,从而避免了不必要的类型转换,并在编译时期就...
在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时指定容器(如集合)可以存储的数据类型。这提高了代码的安全性和效率,因为编译器可以在编译时检查类型,避免了运行时...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
Java 泛型是一种强大的语言特性,它在J2SE 5.0中引入,极大地提升了代码的类型安全性和效率。泛型允许我们在编写类、接口和方法时指定一种或多种类型参数,使得代码能够处理多种数据类型,同时避免了运行时的类型...
Java范型是Java编程语言中的一个重要特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的重用性和安全性。范型在Java中引入的主要目标是增强类型安全,减少强制类型转换,并帮助开发者编写更清晰、更易于...
本例子说明演示了Java范型使用的动机、范型类的使用、范型方法的使用,以及范型的缺陷:类型擦除(type erasure).因为,现在Java的反射机制不能确定集合中的对象类型! 在实际应用中,如果能够灵活应用范型和反射...
11、java范型测试 12、常用JUC类:CountDownloadLatch,CylicBarrier、ReetrantLock等测试案例 13、自定义封装的并发工具类:ConcurrentAction 14、自定义限流注解和其他工具注解 15、AQS队列学习总结和测试 16、CAS...
Java程序设计范型和枚举是Java编程中的关键概念,它们极大地增强了代码的类型安全性和重用性。本文将深入探讨这两个主题。 首先,我们来看什么是范型(Generics)。范型是Java SE 5.0引入的一个特性,它允许在类、...
同时,JDK 5.0的文档和实例代码,如"java枚举学习.doc"和"java范型学习.doc",将提供宝贵的实践指导,帮助你更好地掌握这些内容。而"jdk5.0新特征.txt"则可能包含了对所有新特性的详细描述和使用示例,是深入学习的...
尽管如此,Processing 仍然能够充分利用 Java 的性能,例如通过 Java 范型实现高效的代码翻译和执行。 Processing 开发环境(PDE)包括一个文本编辑器和结果窗口。用户在编辑器中编写代码,运行后,结果会在结果...
在本文中,我们将深入探讨如何使用Java的Socket编程来实现一个简单的基于P2P(Peer-to-Peer)范型的即时聊天系统。P2P网络架构允许每个节点既是客户端也是服务器,这种模式使得数据传输更加分散,提高了系统的可扩展...
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
参考:我眼中的Java-Type体系(1) 我眼中的Java-Type体系(2) 秒懂Java类型(Type)系统 Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现...
范型参考 (1).java
范型参考 (2).java