2

スーパークラスが 3 つの直下のサブクラス、Subclass1、Subclass2、Subclass3 を持つ継承チェーンがあります。

私は持っています:

HashMap<Integer, HashMap<Integer, HashSet<Superclass>>> map = new HashMap<>();

map に整数値 1、2、および 3 の 3 つのハッシュマップを含めたいと考えています。これらの 3 つのハッシュマップはそれぞれ、スーパークラスのサブクラスを 1 つだけ含む HashSet の値を持ちます。

たとえば、 map.get(1) は次を参照する必要があります

HashMap<Integer, HashSet<Subclass1>>

しかし、コンパイラ エラーのため、上記の HashMap をマップに追加することはできません。

(actual argument HashMap<Integer, HashSet<Subclass1>> cannot be converted to
HashMap<String, HashSet<Superclass>> by method invocation conversion)
4

2 に答える 2

2

実行時に HashSet にサブクラスを追加できるようにしたい場合は、変数を次のように宣言できます。

HashMap<Integer, HashMap<Integer, HashSet<? extends Superclass>>> map ...
于 2013-10-02T13:00:31.440 に答える
0

私たちの OP は、オブジェクトの配列 (主に ArrayLists) を作成できるとは信じていないようなので、いくつかの基本を見ていきましょう。

ArrayList<String>[] arrayOfArraylists = new ArrayList[10];
arrayOfArraylists[0] = new ArrayList<String>();

すばらしい。

さて、元の問題です。

Map<Integer, Map<Integer,HashSet<? extends SuperClass>>> map = new HashMap<>();
map.put(1, new HashMap<Integer, HashSet<? extends SuperClass>>());
map.get(1).put(2, new HashSet<SubClass>());

このようにマップを重ねる必要があるのか​​、それとも最初のマップを 3 つのアイテムだけに使用するのが面倒なのかはわかりません。

インデックス クラスを作成し、マップのレイヤーを 1 つだけ持つことができます。

Map<Triplet, HashSet<? extends SuperClass>> map = new HashMap<>();
map.put(new Triplet(1, 2, 3), new HashSet<SubClass>());
于 2013-10-02T13:00:10.373 に答える