为什么需要泛型方法(Generic methods)?

1. 没有泛型类型的方法

假设你想写一个方法,得到两个集合的交集,你可能会这样写:

public static Set getIntersection(Set set1, Set set2){
    Set result = new HashSet();

    for(Object o: set1){
        if(set2.contains(o))
            result.add(o);
    }

    return result;
}

这个方法不是类型安全的,编译器会发出警告,它有几个潜在的问题。 首先,当调用该方法并返回集合时,调用者可能不知道返回类型,并且需要为每个元素进行转换操作。 其次,不同类型的两组不能传递给该方法。 最后一般来说,我们都应该解决此类警告信息。

2. 使用泛型类型的方法

上面的方法可以通过指定泛型来修复:

public static <E> Set<E> getIntersection(Set<E> set1, Set<E> set2){
    Set<E> result = new HashSet<E>();

    for(E o: set1){
        if(set2.contains(o))
            result.add(o);
    }

    return result;
}

此方法是类型安全的,没有警告。 我们指定三个组件的元素类型为 E,这样一来,调用者就知道返回类型了,所以可以直接使用它的元素而不用进行转换。 此外,对元素类型有了严格的限制,因此只有两个具有相同元素类型的集合可以获得交集。

注意一下,方法修饰符和返回类型之间的 <E>

results matching ""

    No results matching ""