Generics 泛型

泛型是JDK1.5之后增加。
泛型的本质:数据类型的参数化。我们可以把泛型理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。

没有使用泛型时:

public class Playground {

    public static void main(String[] args) {

        MyCollection myCollection = new MyCollection();

        // 存入容器时不规定类型
        myCollection.set("a", 1);
        myCollection.set(888, 2);

        // 从容器中取出元素时需要转换类型
        String s = (String) myCollection.get(1);
        int i = (int) myCollection.get(2);
    }
}

class MyCollection {
    Object[] objects = new Object[5];

    public void set(Object object, int index) {
        objects[index] = object;
    }

    public Object get(int index) {
        return objects[index];
    }
}

使用了泛型后

public class Playground {

    public static void main(String[] args) {

        // 这里的String就是实际传入的类型,相当于把String赋值给了MyCollection<E>中的E
        MyCollection<String> myCollection = new MyCollection<>();

        // 现在myCollection只能存放String
        myCollection.set("a", 1);
        myCollection.set("b", 2);

        // 从容器中取出元素时无需类型转换,因为myCollection已经规定了String类型
        String s = myCollection.get(1);
    }
}

// 在类的声明时,增加泛型 <E>, 也可以有多个泛型如<E, T, V>
// 可以理解为给这个类添加了一个"标签",规定这个类只能处理类型为E的元素
class MyCollection<E> {
    Object[] objects = new Object[5];

    public void set(E object, int index) {
        objects[index] = object;
    }

    public E get(int index) {
        return (E) objects[index];
    }
}

java容器中大量使用了泛型,如

public interface List<E> extends Collection<E>

public interface Set<E> extends Collection<E>

public interface Map<K,V>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容