12
public class B extends C <A> {

}

これは何を意味するのでしょうか?その C は A を拡張する必要がありますか? B が C を拡張すると言う代わりに、どのような追加の制限を課すのでしょうか?

4

6 に答える 6

4

タイプ A でパラメータ化された、クラス C から継承するクラス B を定義しています。A は、クラスまたはインターフェイスでなければなりません。

例えば

class MyStringList extends ArrayList<String>

要素のみを含むMyStringIS ANを意味します。このクラスは、たとえば、リスト内のすべての連結を返すメソッドを定義できます。ArrayListStringconcatenate()Strings

List<String>この継承により、インスタンスを変数に割り当てることができます。

List<String> strings = new MyStringList();

Listただし、他のパラメーターを持つ型変数に割り当てることはできません。

List<Object> objects = new MyStringList(); // does not compile
于 2013-06-28T15:19:43.723 に答える
1

C<A>Cは拡張しているという意味ではなく、型パラメーターとしてA持つことができるという意味です。A

これは、Java のインターフェイスComparable<T>と非常によく似ています。Comparator<T>

次の例を検討してください

public class NameSort implements Comparator<Employee> {
   public int compare(Employee one, Employee another){
       return (int)(one.getName() - another.getName());
   }
}

Comparator が Employee オブジェクトを使用して、その名前を使用して並べ替えていることを意味します。

別の例を挙げることもできます

   List<String> list = new ArrayList<String>();

この行は、オブジェクトをパラメーターとしてList使用していることを意味しますString

于 2013-06-28T15:16:39.777 に答える
1

クラスBC.

CBパラメータ化されますA。(つまり、メソッドを使用するAメソッドなど、または A から派生したクラスのメソッドを持つことができます。)

これの典型的な使用例は、DAO (Data Access Object) がある場合です。GenericDAOジェネリックメソッドのように、いくつかの基本的なメソッドを使用してジェネリック DAO を作成しsaveます。他の DAO が を拡張できるようにするGenericDAOには、そのクラスを でパラメータ化しEntity、すべての が保存可能であることを確認しますEntity

次に、ユーザーがエンティティであるGenericDAO<Entity場合など、その実装の束があります。UserDAO extends GenericDAO<User>

于 2013-06-28T15:17:19.353 に答える
0
public class B extends C <A> {

}
  1. A が定義されていない場合、B に制限はありません (いずれかのオブジェクト クラスにすることができます)。
  2. A のタイプが定義されている場合、B はタイプ A または A のサブクラスでなければなりません。
于 2016-12-06T02:25:29.943 に答える
0

簡単な言葉で

タイプ Aパラメーターを受け入れる返すかのいずれかで、またはその上位の で定義されたメソッドがない限り、これは何の意味もありません。Class C

そうすることで、 「タイプ A のオブジェクトを受け入れたり返したりできる」という制限を課すことで、タイプ セーフを確保しています。

于 2013-06-28T16:21:26.543 に答える