Java泛型总结报告(2)

时间:2021-08-31

  篇二:java泛型基础知识总结

  Java泛型

  Java泛型是java1.5中引入的新特性,在此之前,java通过对类型Object的引用来实现参数类型的“任意化”,特点则是需要进行显示的强制类型转换。(而这种显示的类型转换可能是无法进行的,是错误的)但编译器无法发现强制类型转换可能引起的异常,异常只有在运行时才能出现,成为了系统的安全隐患。----------------------------为啥要进入泛型这个概念 泛型的本质是参数化类型,及所操作的数据类型被指定为一个参数,此参数类型可以用在类、接口、和方法的声明及创建中,分别被称为泛型类,泛型接口,及泛型方法。 使用注意事项:

  泛型的类型参数只能是类类型(包括自定义类),但是不能是简单类型 泛型类型参数可以是多个

  泛型的参数类型还可以是通配符类型

  没有泛型的错误:

  Import java.util.*;

  Public class NoGenericTypeDemo{

  Public static void main(String[] args)

  {

  List names=new ArrayList();

  Names.add("张桑拿");

  Names.add(new Integer(2);

  String nameFirst=(String)names.get(0);

  String namesecond=(String)names.get(1);//抛出异常jav.lang.ClassCastException异常,而且编译时没有被发现

  }

  有时候需要使泛型变量能使用任何的类型,此时可以使用通配符”?”否则可能需要编写许多版本的重载函数,使用通配符,使方法printLsit()可以接受各种类型的List对象,否则必须使用重载技术,

  Public static void printList(Listlist)

  {

  //输出集合中的元素

  }

  篇三:JAVA泛型的简单实例

  简单普通类

  package test7;

  import java.util.ArrayList;

  class Student

  {

  int Number;

  String Name;

  String Cla;

  public int GetNumber()

  {

  return Number;

  }

  public void SetNumber(int Number)

  {

  this.Number = Number;

  }

  public String GetName()

  {

  return Name;

  }

  public void SetName(String Name)

  {

  this.Name = Name;

  }

  public String GetCla()

  {

  return Cla;

  }

  public void SetCla(String Cla)

  {

  this.Cla = Cla;

  }

  public Student(){}

  public Student(int Number,String Name,String Cla)

  {

  this.Number = Number;

  this.Name = Name;

  this.Cla = Cla;

  }

  }

  public class test071 {

  public static void main(String[] args) {

  System.out.println("设计者:");

  Student s1 = new Student(123, "张三", "11计科");

  Student s2 = new Student(124, "李四", "11计科");

  Student s3 = new Student(125, "王五", "11计科");

  Student dujingjing = new Student(20110105,"杜","11计科");

  ArrayList AL = new ArrayList();

  AL.add(s1);

  AL.add(s2);

  AL.add(s3);

  AL.add(dujingjing);

  for(int i = 0;i<AL.size();i++)

  {

  Student s = (Student)AL.get(i);

  System.out.println("学号:" +s.Number + " 姓名:" +s.Name+ " 班级:" +s.Cla);

  }

  }

  }

  简单泛型实例

  java中泛型定义

  Java的泛型类就是一个用类型作为参数的类,即带有参数化类型的类。就像我们定义类的成员方法一样。大家很熟悉Java的成员方法形式是method(String str,int i),方法中参数str、i的值是可变的。而泛型也是一样的:class泛型类类名,这里的K和V就像方法中的参数str和i,也是可变的。

  Class UseT{

  Private T x;

  Public SetX(T x){````````}

  }

  package test7;

  泛型类:L2

  class L2

  {

  private T obj;

  public L2(T obj)

  {

  this.obj = obj;

  }

  public T getobj()

  {

  return this.obj;

  }

  public void setobj(T obj)

  {

  this.obj = obj;

  }

  public void showobj(T obj)

  {

  System.out.println("数据为:" + this.obj); }

  }

  主类:

  public class test072 {

  public static void main(String[] args) {

  System.out.println("设计者:");

  L2name = new L2("汽车"); name.showobj(name.getobj());

  L2data = new L2(12); data.showobj(data.getobj());

  }

  }

  简单集合类

  篇四:java泛型总结

  泛型总结篇:

  1)泛型参数只能是类类型

  例如:List// 报错

  List// 正确

  2)泛型的类型参数可以有多个!

  例如:Listlist = new

  ArrayList();

  3)泛型的参数类型可以使用extends,习惯称“有界类型”,

  例如:List,person为list的上界

  4)泛型可以使用通配符类型!“?” 相当于“Object”类型,(注意不可逆) 例如:List //定义成这样可以添加Object类型到List里面去 List

  ; //定义成这样不可以添加String类型到List里面去 List; // 这样就可以互等了!这样还可以设定泛型的上限

  5)带泛型的类,构造方法写法不变,其后不可以加泛型!

  例如:class Student{

  public Student(){} // 构造方法这样写就错了

  }

  6)List不是 List

  的子类!,不可以把前者看成后者的子类,所以不

  可以把前者的实例赋给后者

  例如: ListSlist = new ArrayList();

  Slist.add(new String("abc"));

  List

  Olist = new ArrayList

  ();

  Olist.add("abc");

  Olist = Slist; // 报错!

  7)带不同泛型参数的实例可以共享类的静态方法和静态变量,所以静态方法和静态变量

  申明的时候不可以使用类型行参

  例如:class Cup{

  static T info; // 报错!

  public static setInfo(T info){}; // 报错!

  }

  8)带不同泛型参数的类是共享一个字节码文件的!反编译过后泛型参数就被擦除了

  例如:ListSlist = new ArrayList();

  Slist.add(new String("aaa"));

  ListIlist = new ArrayList();

  Ilist.add(new Integer(100));

  System.out.println(Slist.getClass()==Ilist.getClass()); 结果为true;

  9)当使用定义了泛型参数的接口 和 父类的时候!就不能在带参数了 例如:class Sub extends Father{} // 错误

  10)

  class T{}

  public class typeTest extends T{}//报错

  class T{}

  public class typeTest extends T{} // 正确 可使用String等基本封装类型

  class T{}

  class Student{}

  public class typeTest extends T{} // 这样也正确

  11) 泛型方法 ,泛型方法的参数的作用域仅在本方法,要和方法带泛型区分开! Staticvoid test(ListS_list){} // 泛型参数要放在返回类型前

  12)带有泛型的代码转换成没有泛型的代码由javac完成,虚拟机不处理这些事情!

  这种技术叫做 “擦除”;

  例如:class Food{

  T size;

  public Food(T size){} //注意构造方法不可以带泛型参数!

  public void setSize(){ this.size = size; }

  public T getSize(){ return this.size;}

  }

  public class test{

  public static void main(String arg[]){

  Fooda = new Food(6);

  Ingeger as = a.getSize(); // 返回的是Integer的类型 Food b = a; //把a对象赋给Food变量;泛型参数类型会丢失 即擦除;

  Number size1 = b.getSize(); // b只知道size的类型是Number // Integer in = b.getSize(); 这样是编译错误的!

  } }