【java基础】03.泛型

来源:互联网 发布:java gbk转utf8 编辑:程序博客网 时间:2024/05/01 10:39
一、泛型(Generics):
 
1.所谓泛型:就是变量类型的参数化。
类别定义时的逻辑完全一样,只是里面成员变量的类型不同 (如果需要多个相似的类,需要定义多个文件,不同的只是变量的类别,而逻辑是完全一样的
如果使用泛型,只要代码在编译时没有出现警告,就不会遇到运行时ClassCastException (类型转换异常)
泛型的定义:在类名后面加
    <T>代表变量的类型可以是任意的 可以使用任何的类型来实例化泛型类型中的类型  
     <T extends 另一个类> 代表变量的类型有限制
 
public class GenericFoo<T> {
    private T foo;
    public void setFoo(T foo) {
         this.foo = foo;
    }
    public T getFoo() {
        return foo;
    }
}
新建该类型的对象时,若要传递的值类型不确定则应这样创建。
GenericFoo<? extends List> ge = null;
ge = new GenericFoo<ArrayList>();
ge = new GenericFoo<LinkedList>();
ge 可以指向List的子类
 
GenericFoo<? super List> ge = null;
ge = new GenericFoo<Object>();
ge 可以指向List的父类
 
2.For-Each循环的加入简化了集合的遍历
其語法如下
for(type element : array) { System.out.println(element).... }
当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。
 
3.自动装箱/拆箱大大方便了基本类型数据和它们包装类的使用。
自动装箱:基本类型自动转为包装类。(int〉〉Integer)
自动拆箱:包装类自动转为基本类型。(Integeer〉〉int)
 
4。可变参数:
    可变参数本质上就是一个数组,对于某个声明了可变参数的方法来说,我们既可以传递离散的值,也可以传递数组对象。但如果将方法中的参数定义为数组,那么只能传递数组对象而不能传递离散的值。
 可变参数必须要作为方法参数的最后一个参数,即一个方法不可能具有两个或两个以上的可变参数。
 
5.枚举(Enum):
定义一个枚举类型:
    public enum Color{
        Red,
        White,
        Blue
    }
使用:Color myColor = Color.Red;
 
每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance)。换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确定下来了。
 
6.静态导入:import static
 
参考 更多泛型知识  深度泛型
原创粉丝点击