泛型及自定义泛型
一、起因:JDK1.4以前类型不明确
1、装入集合的类型都被当作Object对待,从而失去自己的实际类型。
2、从集合中取出时往往需要转型,效率低,容易产生错误。
3、方案:在定义集合的时候同时定义集合中对象的类型。
4、作用:
<1>、模板:提高代码的重用率。
<2>、安全:在编译的时候检查类型安全。
<3>、省心:所有的强制转换都是自动和隐式的。
二、概念:泛型就是参数化类型。
1、适用于多种数据类型执行相同功能的代码。
2、泛型中的类型在使用时指定。
3、泛型归根结底就是“模板”。
4、泛型主要适用于在集合中。
三、自定义泛型类的定义及注意事项。
package Gen泛型;
/*
* 自定义泛型类
* 1、<>--->单个大写字母,尽可能见名之意。
* 2、T Type
* K V key value
* E element
* 3、注意点:
* 1、泛型不能使用在静态属性上。
* 2、指定的类型不能为基本类型。
*/
public class Student<T> {
private T javase;
public Student() {
}
public Student(T javase) {
this.javase = javase;
}
public T getJavase() {
return javase;
}
public void setJavase(T javase) {
this.javase = javase;
}
}
package Gen泛型;
/*
* 自定义泛型类的使用:
* 1、在声明时指定具体的类型。
* 2、不能为基本类型。
*/
public class MyStudent {
public static void main(String[] args) {
Student<Integer> stu = new Student<Integer>();
stu.setJavase(80);
System.out.println(stu.getJavase());
}
}
三、自定义泛型接口。
package Gen泛型;
public interface Test<T> {
int Value =1;//因为接口定义的常量默认是public static final,所以不能使用泛型。
T test(T t);
}
为什么接口中的常量必须使用public static final修饰: public: 使接口的实现类可以使用这个常量
static: static修饰就表示它属于类的,随的类的加载而存在的,如果是非static的话,
就表示属于对象的,只有建立对象时才有它,而接口是不能建立对象的,所以
接口的常量必须定义为static
final:final修饰就是保证接口定义的常量不能被实现类去修改,如果没有final的话,
由子类随意去修改的话,接口建立这个常量就没有意义了。
public: 使接口的实现类可以使用这个常量
static: static修饰就表示它属于类的,随的类的加载而存在的,如果是非static的话,
就表示属于对象的,只有建立对象时才有它,而接口是不能建立对象的,所以
接口的常量必须定义为static
final:final修饰就是保证接口定义的常量不能被实现类去修改,如果没有final的话,
由子类随意去修改的话,接口建立这个常量就没有意义了。
package Gen泛型;
import java.util.ArrayList;
import java.util.List;
public class Method {
public static void main(String[] args) {
test("123");
test(new ArrayList());
}
/*
* 泛型方法:在返回类型前加<T>
*/
public static <T> void test(T t){
System.out.println(1);
System.out.println(t);
}
public static <T extends List> void test(T t){
//只能传递List类及它的子类
System.out.println(t);
System.out.println(2);
}
}