欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

泛型

程序员文章站 2022-04-18 14:33:34
...

泛型(给程序带来简洁性和健壮性)

一、泛型的概述
   泛型大多数都在集合中使用,Java7开始,使用泛型的菱形语法:Java允许在构造器后不需要带完整的泛型信息,只要给出一对尖括号(<>)即可,Java可以推断尖括号里应该是什么泛型信息。
   例如:List books = new ArrayList<>();

   泛型的实质:允许在定义接口、类时声明类型形参,类型形参在整个接口、类体内可当成类型使用,几乎所有可使用普通类型的地方都可以使用这种类型形参。

   泛型的应用: 程序只定义了一个List接口,但实际使用时可以产生无数个List接口,只要为E传入不同的类型实参,系统就多出一个新的List子接口。必须指出:List绝不会被替换成ListString,系统没有进行源代码赋值,二进制代码中没有,磁盘中没有,内存中也没有。

泛型的好处:
   1. 解决元素存储的安全性问题
   2.解决获取数据元素时,需要类型强转的问题
注意:
   1.包含泛型声明的类型可以在类型变量、创建对象时传入一个类型实参,从而可以动态的生成无数多个逻辑上的子类,但这种子类在物理并不存在。
   2.当创建带泛型声明的自定义类,为该类定义构造器时,构造器名还是原来的类名,不要增加泛型声明。

二、泛型类和泛型接口
1.泛型类
格式:class 类名{

}

如何指明父类的泛型类型
1.当子类继承父类时,可以直接指明父类的泛型类型,那么子类就不用再声明
public class Women extends Creature {}
2.由于系统中并不会真正生成泛型类,所以instanceof运算符后不能使用泛型类
public class Women extends Creature { }

2.泛型接口
interface 接口名{

}

三、泛型方法
泛型方法(写在返回值的前面)
在定义类、接口时可以使用类型形参,在该类的方法定义和成员变量定义、接口的方法定义中,这些类型形参可被当成普通类型来用。Java5开始提供对泛型方法的支持。
泛型方法的格式:(不受类类型形参的影响)

   修饰符<T,S>返回值 方法名(形参列表){
    			方法体...	
    		}

public E getE(E e){

}

泛型方法和类型通配符的区别
大多时候泛型方法可以代替类型通配符,类型通配符增加了程序的灵活性
类型通配符既可以在方法签名中定义形参的类型,也可以用于定义变量的类型;但泛型方法中类型形参必须在对应方法中显示声明

   泛型方法可以使用static修饰,而泛型类里的普通方法不可以

   java不支持泛型数组

四、类型通配符

语法:<?>
通配符的限制:
List<? extends Number>:泛型的类型只能是Number和Number的子类
List<> super Number>:泛型的类型只能是Number和Number的父类。
   <?extends Comparable>:只允许泛型为实现Comparable接口的实现类的引用

五、泛型的常用应用方式(DAO)

    [DAO类]
    	public class DAO<T> {
    		private Object[] obj = new Object[100];
    		private int total = 0;
    		public void add(T t) {	obj[total++] = t;	}
    		public void delete(T t) {	}
    		public void update(T t) {	}
    	}
    
    [Woman类]
    	public class Woman extends DAO<Woman>{
    		public  Woman(){		}
    	}
    
    [Employee类]
    	public class Employee extends DAO<Employee>{
    		public Employee(){ 		}
    	}
    
    [DAOTest类]
    		import org.junit.Test;
    		public class DAOTest {
    			@Test
    			public void test(){
    				//通过泛型,可以达到多个操纵一个的效果
    				Employee employee = new Employee();
    				Woman woman = new Woman();
    				employee.add(new Employee());
    				woman.add(new Woman());
    			}
    		}
相关标签: 泛型 DAO