java_泛型

一.   泛型类的使用

  1.定义类时使用泛型

  class 类名<字母列表>{    ……      }   泛型常见字母:T, K,V ,E ?   不能使用在静态属性.静态方法上

 

 

  2.注意:

  1.泛型使用时不能指定基本类型   2.使用时指定类型(引用类型,不能使用基本数据类型)   3. 不能使用在静态属性.静态方法上,静态属性在编译时肯定(即不能把字母用在静态属性上)   4.编译时自动检查泛型   5.接口中泛型只能用在方法中,不能用在全局常量 (接口只是由全局常量和抽象方法组成)

 

   3.代码示例

    
public class Student<T1,T2> { private T1 name; private T2 age; public Student(T1 name, T2 age) { super(); this.name = name; this.age = age; } public T1 getName() { return name; } public void setName(T1 name) { this.name = name; } public T2 getAge() { return age; } public void setAge(T2 age) { this.age = age; } public static void main(String[] args) { Student<String,Integer> stu=new Student<String,Integer>("章三",20); System.out.println(stu.getName()+stu.getAge()); } }
示例代码

 

 

二.   泛型方法

  定义:

    修饰符<字母> 返回类型 方法名(字母){}java

  注意:

  1.泛型方法在返回类型前面定义,   2.在使用时肯定对象类型   3.泛型元素只能访问对象的信息,不能修改,由于不肯定对象类型

 

   示例代码: 

  
import java.io.Closeable; import java.io.IOException; public class TestMethod { //测试泛型方法

   public static void main(String[] args) { test1("abc"); } //test1

   public static <T> void test1(T t){ System.out.println(t); } //test2 extends等价于<=

   public static <T extends Closeable> void test2(T... t){ for(T e:t){ try { e.close(); } catch (IOException e1) { // TODO Auto-generated catch block
 e1.printStackTrace(); } } } }
示例代码

 

 

三.   泛型擦除

  定义

  1.父类为泛型类,子类能够为泛型类,也能够不是泛型类,不是泛型类须要指定子类,子类泛型表明字母和父类要相同
  
2.子类为泛型类,父类不指定类型,称为泛型的擦除.使用object替换
  
3.泛型擦除,要么同时擦除,要么擦除父类,子类的类型大于等于父类,仅仅擦除子类是错误的.
  
4.属性类型(根据位置而定):       父类中:随父类而定,       子类中:随子类而定     方法重写:       随父类而定   5.泛型接口与继承是同样的   6.擦除后,不会进行类型检查

 

  示例代码:

  
//父类为泛型类

public abstract class Father<T> { T name; abstract <T> void test(T t); } //子类不指定类型

class son<T> extends Father<T>{ T t2;//本身定义的变量
 @Override <T> void test(T t) { // TODO Auto-generated method stub
 } } //父类为泛型类,子类指定类型

class son1 extends Father<String>{ @Override <T> void test(T t) { // TODO Auto-generated method stub
 } } //子类为泛型类,父类不指定类型,称为泛型的擦除

class son2<T> extends Father{ @Override void test(Object t) { // TODO Auto-generated method stub
 } } //子类父类同时擦除

class son3 extends Father{ @Override void test(Object t) { // TODO Auto-generated method stub
 } } /*//错误:子类擦除,父类没有擦除 class son4 extends Father<T>{ @Override <T> void test(T t) { // TODO Auto-generated method stub } }*/
示例代码

 

四.注意事项

  

没有泛型数组(泛型数组不固定长度,没法开辟空间,泛型数组能够声明,不能够建立,不用)数组

 

泛型不能多态ide

 

返乡客已嵌套,就是复杂一点,并不难测试

 

泛型数组能够声明,不能够建立this

 

声明与定义中泛型只写一次便可spa

相关文章
相关标签/搜索