table
という名前のハッシュテーブルがあります。タイプ値はlong
です。 .values()
を使用して値を取得しています。これらの値にアクセスしたいと思います。
Collection val = table.values();
Iterator itr = val.iterator();
long a = (long)itr.next();
しかし、取得しようとすると、タイプobject
からlong
に変換できないため、エラーが発生します。どうすればそれを回避できますか?
これを試して:
Long a = (Long)itr.next();
最終的にはLongオブジェクトになりますが、オートボクシングではプリミティブlongのように使用できます。
別のオプションはジェネリックを使用することです:
Iterator<Long> itr = val.iterator();
Long a = itr.next();
Number
クラスは、数値データ型のキャストを克服するために使用できます。
この場合、次のコードが使用される可能性があります。
_long a = ((Number)itr.next()).longValue();
_
以下の例を用意しました:Object
tolong
例-1
_// preparing the example variables
Long l = new Long("1416313200307");
Object o = l;
// Long casting from an object by using `Number` class
System.out.print(((Number) o).longValue() );
_
コンソールoutputは次のようになります:
_1416313200307
_
Object
todouble
例-2
_// preparing the example variables
double d = 0.11;
Object o = d;
// Double casting from an Object -that's a float number- by using `Number` class
System.out.print(((Number) o).doubleValue() + "\n");
_
コンソールoutputは次のようになります:
_0.11
_
Object
todouble
例-
これに注意してください簡単な間違い! float値がdoubleValue()
関数を使用して変換される場合、最初の値が最終値と等しくない場合があります。
以下に示すように_0.11
_!= _0.10999999940395355
_。
_// preparing the example variables
float f = 0.11f;
Object o = f;
// Double casting from an Object -that's a float number- by using `Number` class
System.out.print(((Number) o).doubleValue() + "\n");
_
コンソールoutputは次のようになります:
_0.10999999940395355
_
Object
tofloat
例-4
_// preparing the example variables
double f = 0.11;
Object o = f;
// Double casting from an Object -that's a float number- by using `Number` class
System.out.print(((Number) o).floatValue() + "\n");
_
コンソールoutputは次のようになります:
_0.11
_
試してください:long a = ((Long) itr.next()).longValue();
newGenerics機能を使用する必要がありますJava 5。
コレクションから要素を取り出すときは、コレクションに格納されている要素のタイプにキャストする必要があります。 これは不便であるだけでなく、安全ではありません。コンパイラーは、キャストがコレクションのタイプと同じであることをチェックしないため、実行時にキャストが失敗する可能性があります。
Genericsは、コレクションのタイプをコンパイラーに通知して、チェックできるようにする方法を提供します。コンパイラーがコレクションの要素タイプを認識すると、コンパイラーは、コレクションが一貫して使用されていることを確認し、コレクションから取り出される値に正しいキャストを挿入できます。
私の場合、フレックスクライアントから取得したオブジェクトの配列があります。
数値はJavaによってintとして解釈される場合もあれば、長さとして解釈される場合もあります。
したがって、問題を解決するには、次のように「toString()」関数を使用します。
public Object run(Object... args) {
final long uid = Long.valueOf(args[0].toString());
私は同じ問題に直面しましたが、JSPコーディングを行いました。上記のLongおよびジェネリックに関する提案は、機能しないか、コードフラグメントに適合しませんでした。
私はこれを(JSPで)解決する必要がありました:
<%Object y=itr.next(); %>
その後、スクリプトレットで他のJava変数を使用するので、<%= y%>のような私のオブジェクトyを使用します。
long value = Long.parseLong((String)request.getAttribute(""));