2016-11-01 5 views
1

私にこのエラーコードはありますか?以下はオブジェクトを長いデータ型に変換する方法Java

public int part(Object key) { 
    long clientId = (long) key; 
    ... 
} 

エラーです:それは例外をスローする理由

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long 

わかりません。

+4

を 'java.lang.Integer'はjava.lang.Long''にキャストすること_cannot_。 –

答えて

4

コメントで説明したように、Javaではプリミティブ自体でキャストが許可されていても、1つのプリミティブラッパータイプを別のタイプのプリミティブにキャストすることはできません。

例外スタックトレースは、keyパラメータがIntegerオブジェクトであることを示しています。そう、単に変換のこのタイプのために特別に作成された整数のメソッドを使用する場合:

long clientId = ((Number) key).longValue(); 

あなたはより良い鍵が常に Numberオブジェクトであり、これが機能するためにnullでないことを非常に確認してくださいと思います。このメソッドを呼び出す前にnullをテストする必要があるかもしれません。

+1

ホバークラフトをしてくれてありがとう。私はしばらく縛られていた。 –

1

あなたはintからlongに変換することができていても、LongIntegerをキャストすることはできません。

Long clientId = new Long(key) 

Integerがnullの場合、NPEがスローされます。私はあなたにエラー処理を残します。あなたが使用することができます:)

また、:

Long clientId = Long.valueOf(key.longValue()); 
関連する問題