汎用メソッドと汎用パラメータ

3298 ワード

  • 最も早く汎用型に接触したのはJavaの各種コンテナの上であるべきで、このように書く利点は値を取る時にタイプの変換が間違っている可能性を避けることであり、汎用型を指定した後にgetも手動で強く回転する必要はない.
  • List<Integer> list = new ArrayList<Integer>();
  • クラスまたはインタフェース上の汎用はクラスまたはインタフェースを継承または実現する際に、汎用のタイプを指定し、リロードする方法は対応するパラメータのタイプを置き換え、汎用はTとは限らず、他のアルファベットでもよいが、約束は俗成:?不確定なjavaタイプを表します.Tはjavaタイプを表します.K,Vはそれぞれjavaキー値のKey Valueを表す.EはElementを表します.
  • public interface Test<T> {
        T aaa(T t);
    }
    
    public class Demo implements Test<Integer> {
        @Override
        public Integer aaa(Integer t) {
            // TODO Auto-generated method stub
            return null;
        }
    }

    3.1メソッドの汎用とクラスの汎用には必然的な関連はない,すなわち汎用クラスでなくても,汎用メソッドとはそのメソッドが汎用であるメソッド(ここではEを用い,以下の汎用クラスの区別のために用いる)であり,戻り値とは関係なくクラスDemoを実現するメソッドaaaのパラメータは呼び出し者によって決定されるが,戻り値はintである.
    public interface Test {
         int aaa(E e);
    }
    
    public class Demo implements Test {
        @Override
        public  int aaa(E e) {
            return 0;
        }
    }

    3.2汎用クラスと汎用メソッドが一緒に現れると、汎用Tは実装クラスが指定した汎用タイプに置き換えられ、パラメータeは呼び出し者によって決定される.もちろん、戻りたいタイプはパラメータによって決定されるが、IntegerをEに変更することもできる
    public interface Test<T> {
         T aaa(E e, T t);
    }
    
    
    public class Demo implements Test<Integer> {
        @Override
        public  Integer aaa(E e, Integer t) {
            return null;
        }   
    }