首页 > 编程语言 > 详细

java基础知识 泛型

时间:2018-05-20 17:13:56      阅读:167      评论:0      收藏:0      [点我收藏+]

泛型

技术分享图片

泛型类型的参数类型必须是引用类型
如 ArrayList<int> list = new ArrayList<int>();  //错误
 ArrayList<Integer> list = new ArrayList<Integer>();  //正确
list.add(5);  //正确  自动打包(装箱)机制
int i = list.get(0); //正确,如果元素是包装类型,如Integer,Double,Character,可以直接将这个元素赋给一个基本类型的变量。这个过程称为自动拆箱机制

  • 定义泛型类
import java.util.ArrayList;
public class GenericStack<E> {
         private ArrayList<E> list = new ArrayList<E>();
     public boolean isEmpty() {
     return list.isEmpty();
         }
         public int getSize() {
    return list.size();
         }
         public E peek() {
     return list.get(getSize() - 1);
         }
         public E pop() {
     E o = list.get(getSize() - 1) ;
     list.remove(getSize() - 1);
     return o;
          }
public void push(E o) {
     list.add(o);
           }
        public String toString() {
     return "stack: " + list.toString();
          }
}

GenericStack擦除参数类型后的构造函数形式是 GenericStack( ),不是GenericStack<>();
泛型类如果有多个参数类型,则将多个参数放在一个尖括号中,如<E1,E2,E3>。
可以定义类或者接口作为泛型类或者泛型接口的子类型,如Java API中,Java.lang.String类实现Comparable接口的写法是: public  class String implements Comparable<String>;

可以将泛型指定为另外一种类型(或泛型)的子类型,这样的泛型类型称之为受限的
public class BoundedTypeDemo{
        public  static <E extends GeometricObject> boolean equalArea(E object1, E object2 )
        {
            return object1.getArea() == object2.getArea( );
        }
}
注意:    泛型类型放置的位置,应放在方法的返回类型之前(定义泛型方法)或者类名之后(定义泛型类时)

  • 原始类型

可以使用泛型的原始类型(Generic)而无需指定具体类型。如:
GenericStack stack = new GenericStack( ); 等价于
GenericStatck<Object> stack = new GenericStack<Object>( );
这种不带类型参数的GenericStack泛型类称为原始类型。使用原始类型可以向后兼容Java的早期版本。如Comparable类型

  • 通配泛型

技术分享图片

三种形式:
? , 非受限通配,等价于 ? extends object
? extends T, 受限通配,表示T或者T的子类
? super T,下限通配,表示T或者T的父类型

技术分享图片

技术分享图片

 

技术分享图片

 

技术分享图片

技术分享图片

 

java基础知识 泛型

原文:https://www.cnblogs.com/jing-yu/p/9061730.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!