java Generic type

泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。
可以在集合框架(Collection framework)中看到泛型的动机。例如,Map类允许您向一个Map添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。

java.util.Map

public interface Map<K,V>{}

public abstract class AbstractMap<K, V> implements Map<K, V>{}

public class HashMap<K, V> extends AbstractMap<K, V> implements Cloneable, Serializable {}

 

泛型的使用:

    public static void main(String s[]) {
        Map map = new HashMap();
        map.put("cm", "123");
        String aa = (String)map.get("cm");//需要强制转换,否则编译错误
        System.out.println(aa);
    }

要让程序通过编译,必须将 get() 的结果强制类型转换为 String,并且希望结果真的是一个 String。但是有可能某人已经在该映射中保存了不是 String 的东西,这样的话,上面的代码将会抛出 ClassCastException。
理想情况下,您可能会得出这样一个观点,即 m 是一个 Map,它将 String 键映射到 String 值。这可以让您消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的键或值保存在集合中。这就是泛型所做的工作。

 

为了赢得使用泛型的好处,必须在定义或实例化 Map 类型的变量时为 K 和 V 提供具体的值。以一种相对直观的方式做这件事:

        Map<String, String> map = new HashMap<String, String>();//需要特别注意的不管声明和new对象时必须指定K、V类型
        //map.put("cm", new XX()); //compile error
        map.put("cm", "123");
        String aa = map.get("cm"); System.out.println(aa
);

 

 

public interface List<E> extends Collection<E>{}

 

posted @ 2015-02-24 13:45  牧 天  阅读(2249)  评论(0)    收藏  举报