Java 泛型

Java 泛型

泛型在Java中被称之为”JAVA类型”,简称GJ。泛型是JavaSE平台1.5版本增加的新特性。泛型在Java中不是一种数据类型,是一种在编译时期的特殊语法,
它能够让JVM识别从而确定在应用泛型的操作中体现泛型特点,帮助程序员在开发中从泛型中获得更高效和更安全数据的管理操作。 泛型由于不是一种Java的数据类型所以在运行时,JVM将使用擦除法将泛型描述还原成未应用泛型语法的规则进行执行。 泛型基本语法:<T>
泛型能够在代码书写过程中帮助程序员提高效率和数据类型安全。
泛型能够在编译阶段确定数据类型是否符合要求,规避错误发生。
泛型能否避免数据对象强制类型转换操作。
泛型也能够支持在动态下确定数据类型。

Java 泛型

 

 

import java.util.Date;

/**
 * 员工实体类
 */
public class Employee {

    private int id;
    private String name;
    private String longName;
    private String password;
    private Date birth;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLongName() {
        return longName;
    }

    public void setLongName(String longName) {
        this.longName = longName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }
}
import com.GJ.entity.Employee;

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {

        List<Employee> employeeList=new ArrayList<Employee>();
        Employee emp=new Employee();
        emp.setId(1);
        emp.setName("十三");

        Employee emp2=new Employee();
        emp2.setId(2);
        emp2.setName("十四");

        Employee emp3=new Employee();
        emp3.setId(3);
        emp3.setName("十五");

        employeeList.add(emp);
        employeeList.add(emp2);
        employeeList.add(emp3);

        for (Employee e:employeeList){

            System.out.println(e.getName()+"\t"+e.getId());
        }
    }
}

Java通配符泛型

List<?> numList = new ArrayList<>(); 使用通配符<?>的泛型,可以把任意类型的对象丢进去。
但是缺点是,调用的时候只能用Object接收,并通过强制类型转换强转,这样就失去了泛型的一个省事儿的优势。所以最好还是使用确定了类型的泛型比较好些。
public class Demo01 {

    public static void main(String[] args) {

        List<Integer> intList=new ArrayList<Integer>();
        intList.add(new Integer(100));
        intList.add(new Integer(200));
       /*  List<Number> numberList=intList;  //会报错*/
        List<?> list=intList;

        for (Object intObj:list){

            System.out.println((Integer)intObj);
        }
        System.out.println("-----------------------------");
        List<Number> numberList=new ArrayList<Number>();
        numberList.add(new Double(6.66));
        numberList.add(new Double(7.66));
        numberList.add(new Double(16.66));
        for (Number n:numberList){

            System.out.println(n);
        }
    }
}
/**
 * 使用Map集合应用泛型
 */
public class Demo02 {

    public static void main(String[] args) {


        Map<String, Set<Employee>> map=new HashMap<String, Set<Employee>>();

        //创建员工对象
        Employee emp=new Employee();
        emp.setName("十三");

        Employee emp2=new Employee();
        emp2.setName("十四");

        Set<Employee> set=new HashSet<Employee>();
        set.add(emp);
        set.add(emp2);
        map.put("e",set);

       Set<Employee> empSet=map.get("e");

       for (Employee e:empSet){

           System.out.println(e.getName());
       }
    }
}

带泛型的类

public class GJClass<T>{ //这种属于隐式泛型。显示的一般有明确的数据类型如<Integer>

public String getClassName(T t){

    return t.getClass().getName();
  
  }

}
一般情况下隐式的用的比较多,显示的用得少。

带泛型的接口

public interface CountManager<T>{

  double count(T t,double r);
  double count(T t,double bottom,double height);
}

 

上一篇:3 继承知识点


下一篇:[C++][题解]业绩排名