文章会有【原创】或者【转载】标示,部分来自Google Baidu的学习结果 {Java/PHP/Python/Ruby/Go}

Java 在学习四十七【原创】  


泛型

是提供给JAVAC编译器使用的,可以限定集合中的输入类型,让编译器挡住非法输入。


例如:

ArrayList<E> 类定义和ArrayList<Integer> 类引用中设计的术语如下:

1):ArrayList<E> 泛型类型, 不写<>就称为原始类型;

2):ArrayList<E> 中的E成为类型变量或者类型参数;

3):ArrayList<Integer> 成为参数化的类型;

4):ArrayList<Integer> 的中Integer 称为类型参数的实例,或者实际类型的参数;

5):ArrayList<Integer> 中的<>typeof


参数化类型和原始类型的兼容性:

参数化类型可以引用一个原始类型

Collection<String> c = new Vector(); //会有警告信息

原始类型可以引用一个参数化类型的对象;

Collection c = new Vector<String>(); //会有警告信息


通配符


上边界

Vector<? extends Number> x = new Vector<Integer>(); //正确

Vector<? extends Number> x = new Vector<String>(); //错误


下边界 左边是子类,右边是父类

Vector<? super Integer> x = new Vector<Number>(); //正确

Vector<? super Integer> x = new Vector<Integer>(); //正确

Vector<? super Integer> x = new Vector<Byte>(); //错误


package ioJava;


import java.util.ArrayList;

import java.util.Collection;

import java.util.Vector;


public class Test22 {


public static void main(String[] args) {

// 泛型只在编译阶段有效

ArrayList<String> a1 = new ArrayList<String>();

ArrayList a2 = new ArrayList();

System.out.println(a1.getClass() == a2.getClass());

System.out.println("========================");

// 前面泛型化,后面原始类型, obj1只能放入string

ArrayList<String> obj1 = new ArrayList();

obj1.add("obj1");

// 前面原始类型,后面泛型化, obj2在编译阶段采用所有可以放入string int

ArrayList obj2 = new ArrayList<String>();

obj2.add("obj2");

obj2.add(100);

System.out.println(obj1);

System.out.println(obj2);

System.out.println("========================");

Vector v1 = new Vector<String>();

Vector<Object> v2 = v1;

v2.add(0, "vector");

System.out.println(v2);

System.out.println("========================");

print(obj2);

print(v2);

}


// 只能和泛型无关的方法

public static void print(Collection<?> Collection) {

System.out.println(Collection.size());

}


}