泛型方法的定义
把数组拷贝到集合时,数组的类型一定要和集合的泛型相同。
<...>定义泛型,其中的"..."一般用大写字母来代替,也就是泛型的命名,其实,在运行时会根据实际类型替换掉那个泛型。
需要泛型参数或返回值同时又是某个类的子类又是某个接口的实现类的时候,可以使用
<? extends Xxxx & Xxxx>这种写法,注意:接口类型要放在类的后面,且只能使用’&’符。
例:
public class Test{
<E> void copyArrayToList(E[] os,List<E> lst){
for(E o:os){
lst.add(o);
}
}
static <E extends Number> void copyArrayToList(E[] os,List<E> lst){
for(E o:os){
lst.add(o);
}
}
static<E extends Number & Comparable> void copyArrayToList(E[] os,List<E> lst){
for(E o:os){
lst.add(o);
}
}
}
受限泛型是指类型参数的取值范围是受到限制的。
extends关键字不仅仅可以用来声明类的继承关系, 也可以用来声明类型参数(type parameter)的受限关系。例如, 我们只需要一个存放数字的列表, 包括整数(Long, Integer, Short), 实数(Double, Float), 不能用来存放其他类型, 例如字符串(String), 也就是说, 要把类型参数T的取值泛型限制在Number极其子类中.在这种情况下, 我们就可以使用extends关键字把类型参数(type parameter)限制为数字
只能使用extends不能使用 super,只能向下,不能向上。
注意:只有参数表中可以使用<?> ,定义泛型时用 <E>
泛型类的定义
我们也可以在定义类型中使用泛型
注意:静态方法中不能使用类的泛型,因为泛型类是在创建对象的时候给定泛型。
例:
class MyClass<E>{
public void show(E a){
System.out.println(a);
}
public E get(){
return null;
}
}
受限泛型
class MyClass <E extends Number>{
public void show(E a){
}
}
泛型与异常
泛型参数在catch块中不允许出现,但是能用在方法的throws之后。例:
import java.io.*;
interface Executor<E extends Exception> {
void execute() throws E;
}
public class GenericExceptionTest {
public static void main(String args[]) {
try {
Executor<IOException> e = new Executor<IOException>() {
public void execute() throws IOException{
// code here that may throw an
// IOException or a subtype of
// IOException
}
};
e.execute();
} catch(IOException ioe) {
System.out.println("IOException: " + ioe);
ioe.printStackTrace();
}
}
}
泛型的一些局限型
catch不能使用泛型,在泛型集合中,不能用泛型创建对象,不允许使用泛型的对象。
不能实例化泛型
T t = new T(); //error
不能实例化泛型类型的数组
T[] ts= new T[10]; //编译错误
不能实例化泛型参数数
Pair<String>[] table = new Pair<String>(10); // ERROR
类的静态变量不能声明为类型参数类型
public class GenClass<T> {
private static T t; //编译错误
}
静态方法可以是泛型方法,但是不可以使用类的泛型。
泛型类不能继承自Throwable以及其子类
public GenExpection<T> extends Exception{} //编译错误
不能用于基础类型int等
Pair<double> //error
Pair<Double> //right
分享到:
相关推荐
5. **corejava辅导(4--1)、(4--2)、(4--3)**:这些章节可能涵盖了输入/输出(I/O)流,包括文件操作、字节流和字符流,以及如何使用缓冲区进行高效的数据传输。 6. **corejava辅导(5--1)、(5--2)、(5--3...
整体来看,《Java面试集锦: Core Java Essentials》是一本全面覆盖Java核心技术要点的面试辅导书籍。无论是对于即将参加面试的求职者,还是希望巩固Java基础知识的开发者,本书都提供了丰富的学习材料和面试问题,...
**3.3 corejava辅导(1--2)** - **循环结构**: for、while等循环语句。 - **条件判断**: if-else、switch-case等。 - **异常处理**: try-catch-finally块的使用。 **3.4 corejava辅导(1--3)** - **集合框架**:...
1. Java设计和编程基础:涵盖Core Java编程基础、Java设计原则、算法、模式等核心知识。 2. 数据库和Web前端技术:涉及数据库技术(如Oracle、MySQL、SQL优化和PLSQL开发)、Web前端技术(如H5、CSS3、JavaScript、...
7. **CoreJava辅导资料.zip**:这可能包含Java语言的基础教程或参考资料,包括类、对象、接口、异常处理、集合框架等内容,这些都是JavaWeb开发的基础。 8. **javaWeb基础技术辅导.zip**:这个文件很可能包含了详细...
- CPU: Intel Core i5 2.0 GHz - 内存: 2 GB - 硬盘: 250 GB #### 七、测试结果与分析 **测试项目:** 请假管理系统 **测试人员:** 麦城进 **测试结果:** - **系统操作登陆测试:** 用户登录成功后,能够正确跳转...
"CoreJava.rar"可能是一个包含Java核心编程资源的压缩文件,Java是一种广泛用于开发数据库应用程序的编程语言。在数据库应用中,Java可以用来编写DAO(数据访问对象)层,实现对数据库的操作,如CRUD(创建、读取、...
2. **后端开发**:后端通常基于Java、Python或.NET等语言,利用Spring Boot、Django或ASP.NET Core等框架进行开发。 3. **数据库管理**:MySQL、Oracle或SQL Server等关系型数据库用于存储学生、教师信息以及请假...