web-dev-qa-db-ja.com

タイプオブジェクトからlongに変換できません

tableという名前のハッシュテーブルがあります。タイプ値はlongです。 .values()を使用して値を取得しています。これらの値にアクセスしたいと思います。

Collection val = table.values();

Iterator itr = val.iterator();
long a  =   (long)itr.next();

しかし、取得しようとすると、タイプobjectからlongに変換できないため、エラーが発生します。どうすればそれを回避できますか?

16
Mohit BAnsal

これを試して:

  Long a = (Long)itr.next();

最終的にはLongオブジェクトになりますが、オートボクシングではプリミティブlongのように使用できます。

別のオプションはジェネリックを使用することです:

  Iterator<Long> itr = val.iterator();
  Long a = itr.next();
35

Numberクラスは、数値データ型のキャストを克服するために使用できます。

この場合、次のコードが使用される可能性があります。

_long a = ((Number)itr.next()).longValue();
_



以下の例を用意しました:

Objecttolong例-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
_



Objecttodouble例-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
_



Objecttodouble例-

これに注意してください簡単な間違い! 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
_



Objecttofloat例-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
_
7
efkan

試してください:long a = ((Long) itr.next()).longValue();

4
missingfaktor

newGenerics機能を使用する必要がありますJava 5。

コレクションから要素を取り出すときは、コレクションに格納されている要素のタイプにキャストする必要があります。 これは不便であるだけでなく、安全ではありません。コンパイラーは、キャストがコレクションのタイプと同じであることをチェックしないため、実行時にキャストが失敗する可能性があります。

Genericsは、コレクションのタイプをコンパイラーに通知して、チェックできるようにする方法を提供します。コンパイラーがコレクションの要素タイプを認識すると、コンパイラーは、コレクションが一貫して使用されていることを確認し、コレクションから取り出される値に正しいキャストを挿入できます。

このクイック howto またはこれより完全な tutorial を読むことができます。

3
Desintegr

私の場合、フレックスクライアントから取得したオブジェクトの配列があります。

数値はJavaによってintとして解釈される場合もあれば、長さとして解釈される場合もあります。

したがって、問題を解決するには、次のように「toString()」関数を使用します。

public Object run(Object... args) {

  final long uid = Long.valueOf(args[0].toString());
1
ufk

私は同じ問題に直面しましたが、JSPコーディングを行いました。上記のLongおよびジェネリックに関する提案は、機能しないか、コードフラグメントに適合しませんでした。

私はこれを(JSPで)解決する必要がありました:

<%Object y=itr.next(); %>

その後、スクリプトレットで他のJava変数を使用するので、<%= y%>のような私のオブジェクトyを使用します。

0
javabeginner
long value = Long.parseLong((String)request.getAttribute(""));
0
CodeShadow