java基础知识 泛型

Posted 静静的yu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础知识 泛型相关的知识,希望对你有一定的参考价值。

泛型

泛型类型的参数类型必须是引用类型
如 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基础知识 泛型的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记Java基础知识——泛型与集合

201621123062《java程序设计》第九周作业总结

什么意思 在HashMap之前 ? Java中的泛型[重复]

JAVA基础之“泛型”

Java 基础语法详解 Java 中的泛型

Java 基础语法详解 Java 中的泛型