java中泛型测试总结


public class GeneStu {
 /*Person:1.身高;2.体重;
  *该两种属性都有可能是int或者double
  *1,身高cm; int 2,体重kg double
  *2,身高 m; double 2,体重 kg double
  *泛型:将类型以参数的形式传入一个类或者方法,限制类型的使用
  *类的泛型的定义:
  *类名<泛型1,泛型2......>
  *泛型的使用:
  *类名<实际类型1,实际类型2> 引用 = new 类名<实际类型1,实际类型2>();
  *泛型的作用;用于在编译期的时候检查类型,限制类型
  *泛型的原理:泛型是基于擦除机制设计的,在编译器的时候检查类型,但是在编译结束后,被擦除;
  *虚拟机不认识泛型,在字节码文件里没有泛型,作为Object处理
  *方法的泛型:
  *<泛型1,泛型2> 返回值类型 方法名();
  *方法泛型的使用      引用.<实际类型>方法名()   类名.<实际类型>方法名()
  *注意:当在调用方法的时候传入泛型的实际类型,那么,this和类名不能省略
  *拓展:
  *1.泛型 extends 其他类名(可以是泛型,可以是具体类型),在定义泛型的同时限制泛型的范围,必须是指定类型的子类型或者本类型
  *2. ?通配符(作用于引用类型的定义,限制具体对象的泛型)
  *2.1 ? extends 类型A  表示具体对象的泛型必须是类型A的子类型,或者类型A
  *2.2 ? super 类型A  表示具体对象的泛型必须是类型A的父类型或者类型A
  */
 public static void main(String[] args)
 {
  Person<CharSequence,Integer> per = new Person<CharSequence,Integer>();
  per.test();
  //per.setHeight("5");
  //String inte = per.getHeight();
  per.<String>test1("5");
  Person<? extends CharSequence,Integer> person = new Person<String,Integer>();
  Person<? super SimpleDateFormat,Integer> person1 = new Person<DateFormat,Integer>();
 }
}

 class Person<T,K>{
 private T height;
 private K weight;
 public Person(){}
 public Person(T height, K weight)
 {
  super();
  this.height = height;
  this.weight = weight;
 }
 
 public T getHeight()
 {
  return height;
 }
 public void setHeight(T height)
 {
  this.height = height;
 }
 public K getWeight()
 {
  return weight;
 }
 public void setWeight(K weight)
 {
  this.weight = weight;
 }
 @Override
 public String toString()
 {
  return "Person [height=" + height + ", weight=" + weight + "]";
 }
 public void test(){
  Object str = "123";
  //Integer inte = (Integer)str;
  T t = (T)str;
  System.out.println(t);
  this.<String>test1("7");
 }
 public static <Q>void test1(Q q){
  //T t = new T();泛型不能生成对象
  //T[] arr = new T[];不能生成泛型数组
 }
 public static void test2(){
  Person.<String>test1("5");
 }
}

猜你喜欢

转载自blog.csdn.net/wanghuiwei888/article/details/78876102