1

私は現在、いくつかのメソッドをジェネリックにする必要があるプロジェクトに取り組んでいます(コードを読みやすくするため)。

プロジェクトには と の 2 つのクラスがBoxありMyListます。'Box' のコンストラクターは、ジェネリック パラメーターを受け入れます。「MyList」のコンストラクターは 1 つだけです。

public class Box<A, B> {}

それがボックスのクラスです。

public class MyList<T> {}

これが MyList のクラスです。

クラス「ボックス」には、次のようなメソッドがあります。

public static MyList enclose (Box <MyList <Integer, String>> t) {
// Here comes some code that is not important right now.
}

私が今欲しいのは、このメソッドをジェネリックにして、Box. 誰かアイデアはありますか?

4

3 に答える 3

0
public static <T, S> MyList<T> enclose(Box <MyList<T>, S> box) {}

Java には上位の種類の型がないため、上記は Java が許可する限り一般的です。

あるいは、持っているという要件なしでMyList<T>

public static <T, S> T enclose(Box <T, S> box) {}

これらの 2 つの例で、特定のケースでジェネリックを宣言する方法の大まかなアイデアが得られることを願っています。

于 2013-01-10T10:03:29.757 に答える
0

試す

public static <T> MyList<T> enclose(T t) {
    return new MyList<T>();
}

public static void main(String[] args) {
    MyList<Box<String, String>> res = enclose(new Box<String, String>());
}
于 2013-01-10T09:58:30.490 に答える
0

何をしたいのか完全に明確ではなく、ジェネリックパラメーターの数がクラスと一致しませんが、これでうまくいくのでしょうか?

public <T> static MyList<T> enclose (Box <MyList <T>, String> t) {
// Here comes some code that is not important right now.
}

または、MyList について話すのを避けたい場合は、おそらく次のようになります。

public <T> static T enclose (Box <T, String> t) {
// Here comes some code that is not important right now.
}

Box2 番目のバージョンには、オブジェクトの最初のジェネリック パラメーターの型が戻り値の型として含まれています...

于 2013-01-10T09:58:46.720 に答える