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>{}

浙公网安备 33010602011771号