/**
* 泛型的应用:提供给javac编译器使用的,数组前面不能使用参数类型,其他可以;
*
*/
public static void main(String[] args) throws Exception {
ArrayList lists=new ArrayList(); //集合中可以存放任意类型为原始类型;
lists.add(1); //没用泛型有警告
lists.add(1l);
lists.add("abc");
//int i=(Integer)lists.get(1); //因为不知道类型所以转换错误
ArrayList<String> lists2=new ArrayList<String>();//集合中指定类型
lists2.add("1"); //是泛型警告去除
lists2.add("1l");
lists2.add("abc");
String is=lists2.get(1); //具体类型不需要转换
ArrayList<Integer> lists3=new ArrayList<Integer>(); //类型参数的实例
System.out.println(lists3.getClass()==lists2.getClass());//是同一份字节码,java jvm不知道是什么类型;
/*
* 反射:向Integer类型中添加String类型参数
*/
//lists3.add("asd");//不知道是什么对象
lists3.getClass().getMethod("add", Object.class).invoke(lists3, "abc");//invoke(lists3, "abc");向lists3中添加“abc”;
System.out.println(lists3.get(0));
Collection<String> collection=new Vector(); //参数化与原始类型兼容;
//Vector<String> ve=new Vector<Object>(); //参数化类型不考虑继承;
//下面是否正确:?
Vector v1=new Vector<String>();
Vector<Object> v2=v1;
//以上2个都是对的。
printCollection(lists3); //调用printCollection()
//String.class.asSubclass(Number.class);
Class<?> x;
Class<String> y = null;
x=y;
//如何打印HashMap中的键值;通过Map.Entry类添加到set集合
HashMap<String, Integer> map=new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
Set<Map.Entry<String, Integer>> Entryset=map.entrySet();//Map.Entry类通过set集合可以进行迭代;
for(Map.Entry<String, Integer> entry:Entryset){
System.out.println(entry.getKey()+":"+entry.getValue());
}
add(1, 2); //调用add();
add(2.2, 3); //都是Number类型
add(2, "yy"); //都是Object类型
awp(new String[]{"asd","ds","a"}, 1, 2);//调用awp();
Object s="hkl";
String str=Change(s);//调用Change();
copy(new Vector<String>(), new String[10]);//调用copy()
}
/*
* 泛型的通配符
*/
public static void printCollection(Collection<?> lists3){ //可以传入任意类型
//lists3.add(1); //不知道类型无法添加具体类型参数
System.out.println(lists3.size());
for(Object s:lists3){
System.out.println(s);
}
}
/*
* 自定义泛型方法
*/
private static <T> T add(T x,T y){ //T为新的任意类型
return null;
}
private static <T> void awp(T[]a,int b,int c){ //替换任意类型的数组元素
T x=a[b];
a[b]=a[c];
a[c]=x;
}
/*
* Object转换为任意类型方法
*/
private static <T> T Change(Object obj){
return (T)obj; //强转为自定类型
}
/*
* 将数组拷贝到另一个集合
*/
public static <T> void copy(Collection<T> s,T[] n){
for (int i = 0; i < n.length; i++) {
s.add(n[i]); //将数组元素添加到集合
}
}
泛型的应用
最新推荐文章于 2023-05-31 20:35:23 发布