[解決済み] HashMapの値がListにキャストされないのはなぜですか?
質問
ハッシュマップに値を入れているのですが、それは以下のような形式です。
Map<Long, Double> highLowValueMap=new HashMap<Long, Double>();
highLowValueMap.put(1l, 10.0);
highLowValueMap.put(2l, 20.0);
リストを作成するために
values()
メソッドでリストを作成したい。
List<Double> valuesToMatch=new ArrayList<>();
valuesToMatch=(List<Double>) highLowValueMap.values();
または
List<Double> valuesToMatch=(List<Double>) highLowValueMap.values();
ただし、例外を投げます。
スレッド "main" java.lang.ClassCastException で例外が発生しました。
java.util.HashMap$Values を java.util.List にキャストすることができません。
でも、リストの作成に渡すことができるんです。
List<Double> valuesToMatch = new ArrayList<Double>( highLowValueMap.values());
どのように解決するのですか?
TL;DR
List<V> al = new ArrayList<V>(hashMapVar.values());
説明
なぜなら
HashMap#values()
は
java.util.Collection<V>
をキャストすることはできません。
Collection
を
ArrayList
に変換すると、以下のようになります。
ClassCastException
.
を使うことをお勧めします。
ArrayList(Collection<? extends V>)
コンストラクタを使うことをお勧めします。このコンストラクタは
Collection<? extends V>
を実装したオブジェクトを引数として受け取ります。このとき
ClassCastException
の結果を渡すと
HashMap.values()
の結果を渡すと、このようになります。
List<V> al = new ArrayList<V>(hashMapVar.values());
Java APIのソースコードにさらに踏み込む
HashMap#values()です。
ソースで戻り値の型を確認し、自分自身に問いかけてみてください。
java.util.Collection
にキャストされるか?
java.util.ArrayList
? いいえ
public Collection<V> values() {
Collection<V> vs = values;
return (vs != null ? vs : (values = new Values()));
}
ArrayList(Collection)です。 ソースの引数の型を確認してください。引数がスーパータイプのメソッドは、サブタイプを受け入れることができますか?はい
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
関連
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
executeQuery()でデータ操作文が発行できない。解決方法
-
Javaでよくある構文エラー
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
代入の左辺は変数でなければならない 解答
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。
-
swagger2 モデルが表示されない モデルが見つからない @ApiModel アノテーションが表示されない問題
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] List<Dog> は List<Animal> のサブクラスですか?Java のジェネリックはなぜ暗黙のうちに多相性にならないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
NullPointerException - java.lang.
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
無効なメソッド宣言
-
-bash: java: コマンドが見つからない 解決方法
-
SocketException java.netの4つの例外解決策。
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
配列定数は初期化子でのみ使用可能です。
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション