java泛型(4) 泛型方法

  1. 由于对于一个集合来说,Collection<String>,Collection<Integer>都不是List<Object>的子类,所以在将集合作为方法的参数的时候Collection<Object>并不但能说是Collection<String>,Collection<Integer>的父类从而替代这两个类型的集合,示例如下:
    package GenericMethod;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    
    public class GenericMethodTest {
    
        static void fromArrayToCollection(Object[] a, Collection<Object> c){
            for(Object o : a){
                c.add(o);
            }
        }
    
    
        public static void main(String args[]){
            String[] strArr = {"a", "b"};
            List<String> strList = new ArrayList<>();
            GenericMethodTest.fromArrayToCollection(strArr, strList);
        }
    
    
    }
    
    在上面这个示例中,形参为Collection<Object>而实参为List<String>,显而易见这个程序连编译都通不过。
  2. 所以带有泛型的方法格式应该是这个是这个样子的:
    修饰符 <T,S> 返回值类型 方法名 (形参列表){
        方法体
    }

    具体的代码示例如下:

    //使用带有泛型的方法格式是
    // 修饰符<T,S> 返回值类型  方法名(形参列表){   //如果只涉及到一种泛型的话就不用,和S
    //方法体
    //}
    //所以以上的方法应该改写为
    //static <T> void formArrayToCollection(T[] a, Collection<T> c{
    //方法体
    //}
    
    
    package GenericMethod;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class GenericMethodTestCorrect {
    
        static <T> void fromArrayToCollection(T[] a, Collection<T> c){
            for(T o : a){
                c.add(o);
            }
        }
    
        public static void main(String args[]){
            Object[] oa = new Object[100];
            Collection<Object> co = new ArrayList<>();
            fromArrayToCollection(oa, co);
            String[] sa = new String[100];
            Collection<String> cs = new ArrayList<>();
            fromArrayToCollection(sa,cs);
    
        }
    
    }
    
  3. 一下为不止一个泛型类型的示例

    package GenericMethod;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    
    public class ArgsTest {
    
    
        <T,S> void test(List<T> a, List<S> b){
            for(int i=0; i<a.size(); i++){
                 System.out.println(a.get(i) + "," + b.get(i));
            }
        }
    
    
    
        <T> void test2(Collection<? extends T> a, Collection<T> b){
            for(T ele : a){
                b.add(ele);
            }
        }
    
        public static void main(String args[]){
    
            ArgsTest argsTest = new ArgsTest();
            List<String> a = new ArrayList<>();
            List<Integer> b = new ArrayList<>();
    
            a.add("ads");a.add("zxc");
            b.add(1);b.add(22);
    
            argsTest.test(a,b);
    
            Collection<Object> c = new ArrayList<>();
            Collection<String> d = new ArrayList<>();
            argsTest.test2(d,c);
    
        }
    
    }
    

猜你喜欢

转载自blog.csdn.net/weixin_39452731/article/details/81565972