パラメータを使用してJavaのジェネリック - 継承

coolchock:

私は、次のコードを持っています:

public class Inheritance {

    class A<T,U,V>{

    }

    class B<T,U,V> extends A<T,U,T>{        

    }
}

誰かがそれが実際にどのように動作するか、私に説明してもらえますか?クラスBは、パラメータが "T、U、T" である、またはそれが実際A "T、U、V" クラスを拡張するだけのクラスを拡張していますか?

kuceraf:

実際の例にそれを入れてみましょう:

 public class Inheritance {
        public static class A<T,U,V>{
             T t;
             U u;
             V v;

             A(T t, U u, V v) {
                this.t = t;
                this.u = u;
                this.v = v;
            }

            T getT() {return t;}
            U getU() {return u;}
            V getV() {return v;}
        }

        public static class B<T,U,V> extends A<T,U,T>{
            public B(T t, U u, V v) {
                super(t, u ,t);
            }
        }

        public static void main(String[] args) {
            B<Boolean, Integer, String> b = new B<>(false, 1, "string");
           // 't' attribute is Boolean 
           // since type parameter T of class B is Boolean
           Boolean t = b.getT(); 
           // 'v' attribute is Boolean 
           // since type parameters T and V of class A must have the same type as 
           // type parameter T of class B 
           Boolean v = b.getV(); 
        }
    }

基本的に、クラスBは、(3つの汎用のparamsを有している)クラスA延びています。宣言することでB<T,U,V> extends A<T,U,T>あなただけのBの最初のパラメータの同じタイプのA初とAの第三ジェネリックのparamをバインド

クラスBのコンストラクタの例に示すように、我々は、3つの異なるタイプがある - ブール値、整数、文字列を、しかし、クラスAの第一と第3回のコンストラクタのparamが両方ブール型にバインドされているので、クラスAのコンストラクタで、我々は唯一の2つの異なるタイプのブール、整数を持っていますタイプ

より多くのジェネリックと継承にここで見つけることができます:https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=221774&siteId=1