JAva汎用(4)汎用メソッド

2661 ワード

  • 一つの集合に対してCollection、CollectionはいずれもListのサブクラスではないので、集合をメソッドのパラメータとするときCollectionはCollectionとは言えないがCollectionであり、Collectionの親はこの2つのタイプの集合に取って代わる.例は以下の通りである:
    package GenericMethod;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    
    public class GenericMethodTest {
    
        static void fromArrayToCollection(Object[] a, Collection c){
            for(Object o : a){
                c.add(o);
            }
        }
    
    
        public static void main(String args[]){
            String[] strArr = {"a", "b"};
            List strList = new ArrayList<>();
            GenericMethodTest.fromArrayToCollection(strArr, strList);
        }
    
    
    }
    
    上記の例では、形はCollectionであり、実はListとして参照されている.このプログラムはコンパイルにも通じないことが明らかになった.
  • したがって、汎用的なメソッドフォーマットは、
                   (    ){
           
    }
    の具体的なコード例は、
    //            
    //               (    ){   //               , S
    //   
    //}
    //            
    //static  void formArrayToCollection(T[] a, Collection c{
    //   
    //}
    
    
    package GenericMethod;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class GenericMethodTestCorrect {
    
        static  void fromArrayToCollection(T[] a, Collection c){
            for(T o : a){
                c.add(o);
            }
        }
    
        public static void main(String args[]){
            Object[] oa = new Object[100];
            Collection co = new ArrayList<>();
            fromArrayToCollection(oa, co);
            String[] sa = new String[100];
            Collection cs = new ArrayList<>();
            fromArrayToCollection(sa,cs);
    
        }
    
    }
    
  • であるべきである.
  • いくつかの汎用タイプの例
    package GenericMethod;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    
    public class ArgsTest {
    
    
         void test(List a, List b){
            for(int i=0; i void test2(Collection extends T> a, Collection b){
            for(T ele : a){
                b.add(ele);
            }
        }
    
        public static void main(String args[]){
    
            ArgsTest argsTest = new ArgsTest();
            List a = new ArrayList<>();
            List b = new ArrayList<>();
    
            a.add("ads");a.add("zxc");
            b.add(1);b.add(22);
    
            argsTest.test(a,b);
    
            Collection c = new ArrayList<>();
            Collection d = new ArrayList<>();
            argsTest.test2(d,c);
    
        }
    
    }
    
    これは私が李剛が編纂した「クレイジーJava講義」を見てまとめたものです.