泛型的作用在于限制参数类型,让代码更严谨,以后使用时对参数的调用不会出错
来直接看看Java内部类泛型的实现
1 // IntelliJ API Decompiler stub source generated from a class file 2 // Implementation of methods is not available 3 4 package java.util; 5 6 public interface Map<K, V> { 7 8 int size(); 9 10 boolean isEmpty(); 11 12 boolean containsKey(java.lang.Object o); 13 14 boolean containsValue(java.lang.Object o); 15 16 V get(java.lang.Object o); 17 18 V put(K k, V v); 19 20 V remove(java.lang.Object o); 21 22 void putAll(java.util.Map<? extends K,? extends V> map); 23 24 void clear(); 25 26 java.util.Set<K> keySet(); 27 28 java.util.Collection<V> values(); 29 30 java.util.Set<java.util.Map.Entry<K,V>> entrySet(); 31 32 boolean equals(java.lang.Object o); 33 34 int hashCode(); 35 36 static interface Entry<K, V> { 37 38 K getKey(); 39 40 V getValue(); 41 42 V setValue(V v); 43 44 boolean equals(java.lang.Object o); 45 46 int hashCode(); 47 } 48 }
这个是Java中Map接口的实现
注意到Map接口中定义的方法,
1 V put(K k, V v);
他的返回值类型和参数类型都是K,V,也就是说它没有限制一个强类型,比如Integer或者String
我们可以根据自己的需要设置泛型是Integer或者String,以此来限制以后传入和参数类型和对参数方法的调用
我们一般调用的时候会这么写
1 Map<String, String> strMap = new HashMap<String, String>();
这里以后我们对strMap进行put操作时,传入的类型就只能是String
而从strMap中取得元素,这个取得的元素也是最为String类来操作的
而泛型中的类型也是可以支持继承的
1 class Sort<E extends Comparable<E>> { /** **/ }