------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
Map<T,K>的案例:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class GenericsTest{
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("zhang",1);
map.put("zhang",2);
map.put("zhang",3);
//map.put("li", "2");
//map.put(3,"wang" );
Set<Map.Entry<String,Integer>> allSet=map.entrySet();
//输出的两种方式,第一种:
for(Map.Entry<String, Integer> me:map.entrySet()){
//循环输出Map的key,value
System.out.println(me.getKey()+" : "+me.getValue());
}
System.out.println("******************************");
//输出的第二种,第二种:
//实例化Iterator
Iterator<Map.Entry<String,Integer>> iter=allSet.iterator();
//迭代输出
while(iter.hasNext()){
Map.Entry<String,Integer> me2=iter.next();
System.out.println(me2.getKey()+" : "+me2.getValue());
}
}
}
泛型应用中的注意点:
Collection c=new Vector<String>( );可以,出现警告
Collection<String>c =new Vectror( )可以,出现警告
Vector<String> v=new Vector<Object>( )不可以
Vector<Object> v=new Vector<String >( ) 不可以
Vector v1=new Vector<String>( ) , Vector<Object> v2=v1;可以。
Vector<Integer> v[ ]=new Vector<Integer>[10]不可以
下面简单讲解一下通配符的注意事项:
public static void print(Collection<Object> col){
for(Object obj: col){
System.out.println(obj);
}
col.add("Stirng");//没错
col=new HashSet<Date>();//会报告错误
与上面对比,再看下面的正确使用方式:
public static void print(Collection<?> col){
for(Object obj: col){
System.out.println(obj);
}
col.add("Stirng");//错误,因为它不知道自己未来匹配的就是String
col.size();//可以,此方法跟参数类型无关
col=new HashSet<Date>();//可以
此次用的是通配符"?",所以可以把new HashSet<Date>()当成变量接收。
以此来个总结:使用"?"可以引用其他各种参数化的类型,通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。