- 一、什么是泛型?
- 二、泛型的使用
- 1. 泛型类:`public class 类名 {}`
- 2. 泛型函数:`public void 函数名(T t){xxx}`
- 3. 泛型接口:`public interface 接口名 {}`
- 三、泛型通配符(?)
一、什么是泛型?
由来:
早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。
JDK5之前使用Object传输,然后进行向下转型,这里可能在运行期强转失败抛ClassCastException异常,导致程序异常终止。
好处:
引入泛型可以将运行期异常转移到编译异常,在编写代码时就可以检测出问题。
避免了向下转型,提高了代码的扩展性。
注意:
泛型类型必须是引用类型;
泛型只在编译期有效,在运行期就擦除了。
泛型机制:
二、泛型的使用是一种将数据类型明确工作,推迟到创建对象或调用方法时才去明确的一种机制。
泛型格式:
1. 泛型类:public class 类名即定义在类上:public class 类名<泛型类型1,…>
//在类申明后申明通用类型E,则可以在变量、方法返回值和方法参数使用 public class MyClass2. 泛型函数:public{ //在变量处使用通用类型,且并需在类申明后申明通用类型 public E e; //此处报错因为,变量通用类型必须在类申明后申明 // T t; //在方法返回值处使用通用类型 public E getE() { return e; } //在方法参数使用通用类型 public void setE(E e) { this.e= e; } //方法返回值通用类型 和 方法参数通用类型 可以在方法前申明 // 这就是 泛型函数 使用方法 public T getT(T t) { return t; } } public class Test { public static void main(String[] args) { MyClass c= new MyClass(); c.setE("111"); System.out.println(c.getE()); System.out.println(c.getT(123)); } }
即定义在函数上:public <泛型类型> 返回类型 方法名(泛型类型 变量名)
public class MyClass {
public void show(T t){
System.out.println(t);
}
}
public class Test {
public static void main(String[] args) {
MyClass c = new MyClass();
c.show("111");
c.show(111);
c.show(1.11);
}
}
3. 泛型接口:public interface 接口名即定义在接口上:public interface 接口名<泛型类型>
public interface MyInterface三、泛型通配符(?){ public abstract void show(E e); } //子类在实现接口时,这个接口上有泛型,就可以明确接口上的泛型的具体类型 public class MyClass1 implements MyInterface { @Override public void show(String s){ System.out.println(s); } } //子类在实现接口时,没有明确接口上的泛型,那就要定义成泛型类 public class MyClass2 implements MyInterface { @Override public void show(E e){ System.out.println(e); } } public class Test { public static void main(String[] args) { MyClass1 c1=new MyClass1(); c1.show("111");//111 MyClass2 c2 = new MyClass(); c2.show(11);//11 } }
- 通配符问号(?):表示任意类型,如果没有明确,那么就是Object以及任意的Java类。如List>表示可以存放任意对象类型的List,和List
- 连接限制符:extends:向下限定,E及其子类
? extends E- 连接限制符:super:向上限定,E及其父类
? super E
public class TestGeneric {
public static void main(String[] args) {
//泛型如果明确写的时候,前后必须一致,可以加Collections.singleton()转型
Collection
若有不正之处,请谅解和批评指正,谢谢~
转载请标明:
https://blog.csdn.net/vihem/article/details/121083039



