パラメータとして受け取るメソッドがありMap<Integer, Set<Object>>
ます。Map<Integer, Set<String>>
パラメータとして aと aを使用して、2 つの異なる場所から呼び出す必要がありMap<Integer, Set<Integer>>
ます。
コンパイラの不満のため、メソッド パラメーターのシグネチャを に変更しましたMap<Integer, ?>
。今は呼び出すことができますが、別の問題があります。方法は基本的に次のとおりです。
private void methodA (Map<Integer, ?> inOutMap, Integer key, Object value) {
Set<Object> list = new HashSet<Object>();
if (!inOutMap.containsKey(key)) {
list.add(value);
} else {
list = (Set<Object>) (Set<?>) inOutMap.get(key); //I wrote the cast, but looks quite ugly
list.add(value);
}
inOutMap.put(key, list); //compiler error
//The method put(Integer, capture#4-of ?) in the type Map<Integer,capture#4-of ?> is not applicable for the arguments (Integer, Set<Object>)
}
コンパイラエラーを解決する方法はありますか? これは、 へのキャストlist
です?
。
2 番目の質問は概念的なものです。異なるパラメータ シグネチャを持つ 2 つの異なるメソッドを記述する以外に、これを行うためのより良い方法はありますか?