0

私は次のコードを持っており、メンバー値はオブジェクト型であり、このプロセスでは = long であり、大きな 10 進数にキャストしたいのですが、次のコードを実行しようとするとエラーが発生します:java.lang.Double cannot be cast to [C

} else if  (typeName.equals("java.math.BigDecimal"))) {
        return new SwitchInputType<BigDecimal>(new BigDecimal((char[]) memberValue));
4

4 に答える 4

2

エラーメッセージ:

java.lang.Double cannot be cast to [C

このキャストは違法であるとあなたに伝えます:

(char[]) memberValue

だからそれをしないでください。エラーメッセージはそれmemberValueがであるとあなたに告げるDoubleので、これはうまくいくはずです:

return new SwitchInputType<BigDecimal>(new BigDecimal((Double) memberValue));

宣言されたタイプによってはmemberValue、キャストの宣言されたタイプが完全に不要な場合がありますが宣言されたタイプはObjectです。あるいは、BigDecimal文字列を受け入れるコンストラクターがあるので、これを回避しようとすることもできますが、実際にはそれほど臭いではありません。

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.toString()));
于 2013-03-19T20:43:57.340 に答える
2

[C「の配列」タイプを表しcharます。実際、Doubleの配列にをキャストすることはできません。また、キャストするchar必要もありません。メッセージによると、ですmemberValueのでDouble、やりたいだけです

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue));
于 2013-03-19T20:44:29.377 に答える
0

そのエラーが発生した場合は、memberValueがDoubleであることを意味します。この場合、おそらく使用する必要があります

new BigDecimal(memberValue)

しかし、確かにもっと多くのコードを見る必要があります。

于 2013-03-19T20:43:30.750 に答える
0

エラーメッセージは、それmemberValuejava.lang.Doubleオブジェクトであり、にキャストしようとしていることを意味しchar[]ます。Doubleaはではないので、それは機能しませんchar[]

この場合、キャストを削除しdoubleValue()て、Doubleオブジェクトを呼び出すことができます。

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.doubleValue()));

このように、の代わりにBigDecimalそのコンストラクターを使用しています。doublechar[]

のタイプがの場合、memberValue最初にObjectキャストする必要があります。Double

((Double)memberValue).doubleValue()
于 2013-03-19T20:44:03.497 に答える