1

私はジェネリック医薬品の経験があまりなく、問題があります。私には2つのクラスと2つのジェネリック型があり、同じクラスを渡すことをインスタンス化する必要があるので、次のようなことをしようとしています。

protected MyNotGenericClass(Class<CommonType> myClass) {
    g1= new GenericType1<myClass>();
    g2 = new GenericType2<myClass>();
}

CommonTypeクラスをコンストラクターに渡します。

new NotAGenericClass(CommonType.class);

しかし、それは機能しません'myClass' cannot be resolved to a type

私が間違っているのは何ですか?

アップデート

NotAGenericClassSpringを使用してインスタンス化する必要があり、いくつかの問題が発生する可能性があるため、汎用タイプではないことが重要であることに注意してください。

4

4 に答える 4

1

次のように、クラスをジェネリックにしてみてください。

public class MyClass<T extends CommonType> {

    private GenericType1<T> g1 = new GenericType1<T>();
    private GenericType2<T> g2 = new GenericType2<T>();

    // no constructor needed

}

于 2012-12-12T16:11:26.873 に答える
0

パラメトリックタイプを他のクラスにバブルアップする必要があります。

class Foo<T> {
  private Bar1<T> g1;
  private Bar2<T> g2;
  protected Foo(Class<T> clazz) {
    g1 = new Bar1<T>();
    g2 = new Bar2<T>();
  }
}

パラメータを渡す唯一の理由clazzは、実行時にリフレクション指向の操作を実行する必要がある場合であることに注意してください。

于 2012-12-12T15:42:19.197 に答える
0

型パラメーターは、(参照型 i.、クラス型、またはインターフェイス型)のみにすることができますが、参照変数にすることはできません。

あなたのコードは以下のコードと同じです:

            String s="12";
        List<s>  list = new ArrayList<s>();

Type Parameters は実際の Type (Reference Types) である必要があるため、上記のコードは無効です。ここで s は参照変数ですが、型ではありません。同じことがあなたのコードにも当てはまります。

編集:

コンストラクターをジェネリックにしたい場合は、次のようにします。

protected <T> Constructor(T myClass) {
    g1= new GenericType1<T>();
    g2 = new GenericType2<T>();
}

あなたの呼び出しは次のようになります:

new Constructor(new CommonType());
new Constructor(new AnotherCommonType());
于 2012-12-12T15:17:07.927 に答える
0

ジェネリックで myClass を使用することはできません。これはクラスではなく変数です。

ジェネリックの使用例:

public class GenericExample<T> {
        private T genericObject;

        public GenericExample(T genericObject){
            this.genericObject = genericObject;
        }

        public T getGenericObject(){
            return genericObject;
        }

    public static void main(String[] args){
        GenericExample<String> gen1 = new GenericExample<String>("This is a String");
        GenericExample<Integer> gen2 = new GenericExample<Integer>(1);

        String format = "value : %s, %s";
        System.out.println(String.format(format, gen1.getGenericObject(), gen1.getGenericObject().getClass()));
        System.out.println(String.format(format, gen2.getGenericObject(), gen2.getGenericObject().getClass()));
    }
}

出力:

value : これは文字列、クラス java.lang.String です

値: 1、クラス java.lang.Integer

于 2012-12-12T15:50:59.470 に答える