2

MyType という名前のジェネリック クラスのヘッダーを記述します。クラスには 2 つの型パラメーターが必要です。最初の型パラメーターの上限は Number クラスにする必要があります。2 番目の型パラメーターの上限は、String クラスにする必要があります。

このようなものが正しいでしょうか?

public class MyType<T extends Number> {}

2 番目の型パラメーターを上限として取得するにはどうすればよいですか? 番号を拡張して文字列を拡張することはできますか?

4

4 に答える 4

4

あなたはそれをこのように宣言します

 public class TestThis <T extends Number, X extends String> {}

x extends Stringは動作します。Stringは final クラスであり、拡張できないことに注意してください。Eclipseは私にこの警告を与えました:

型パラメーター X は、最終的な型 String によって制限されるべきではありません。最終的な型をさらに拡張することはできません

于 2012-09-29T01:50:06.607 に答える
1

あなたは質問を誤解しています.2つの境界を持つ1つの型パラメータではなく、それぞれが境界を持つ2つの型パラメータをクラスに与えるように求めています.

たとえば、このクラスには 2 つの型パラメーターTとがありUます。

public class MyType<T, U> { }

境界を追加するための他の答えはあなたに任せます。


編集:単一の型パラメーターに複数の上限が必要な場合は、&それらを区切るために使用することに注意してください。

<T extends B1 & B2 & B3>

しかし、Java には多重継承がないため、追加の上限はインターフェースにしかできません。ここでB1は、クラスまたはインターフェースを指定できますが、インターフェースB2B3ある必要があります (参照: Java チュートリアル)。

于 2012-09-29T01:48:29.563 に答える
1

2 番目の型パラメーターを上限として取得するにはどうすればよいですか? 番号を拡張して文字列を拡張することはできますか?

,likeで区切られた 2 番目のパラメーターを追加できます。

public class MyType<T extends Number, S extends String> {
}

String は final クラスなので奇妙に見えますが、上限のために拡張することはできます。

宣言は次のようになります。

MyType<Long,String> myType = new MyType<Long, String>();
于 2012-09-29T01:55:10.443 に答える
1

の上限Aがある場合、それは を意味します。したがって、宣言は次のようになります。BA extends B

public class MyType<T extends Number, U extends String> {
    ...
}

2 つの型パラメーター(現在のように 1 つだけでなく)を持つように求められるためTU上記の と があります。ただし、次の点に注意してください: String isfinalであるため、型Uを の拡張にすることはできませんString(ただし、にUすることはできますString)。

于 2012-09-29T01:56:32.427 に答える