【Java】String cannot be cast to class java.math.BigDecimalのエラー回避
この記事ではString cannot be cast to class java.math.BigDecimalのエラーと回避方法について解説します。
「String cannot be cast to class java.math.BigDecimal」String型はBigdecimal型にキャストできません。という意味で次のような実装を行うとエラーとなります。
Map<String, Object> map = new HashMap<>(); map.put("キー値1", "1"); map.put("キー値2", "2"); BigDecimal bd = (BigDecimal) map.get("キー値1"); System.out.println(bd); // 実行結果 Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.math.BigDecimal (java.lang.String and java.math.BigDecimal are in module java.base of loader 'bootstrap')
Map内ではString型で値をセットしており、BigDecimal型で取り出そうとすることが原因です。
String型をBigDecimal型として取り出すには以下のようにすれば取り出すことができます
Map<String, Object> map = new HashMap<>(); map.put("キー値1", "1"); map.put("キー値2", "2"); BigDecimal bd = new BigDecimal((String) map.get("キー値1")); System.out.println(bd); //実行結果 1
値を取り出すことができました。
●まとめ
- BigDecimal bd = (BigDecimal) map.get(key); ⇒NG
- BigDecimal bd = new BigDecimal((String) map.get(key)); ⇒OK
Javaの記事の一覧はJava にまとめてあります