J'ai une table de hachage nommée table
. La valeur de type est long
. Je reçois des valeurs en utilisant .values()
. Maintenant, je veux accéder à ces valeurs.
Collection val = table.values();
Iterator itr = val.iterator();
long a = (long)itr.next();
Mais lorsque j'essaie de l'obtenir, cela me donne une erreur car je ne peux pas convertir le type object
en long
. Comment puis-je faire le tour?
Essaye ça:
Long a = (Long)itr.next();
Vous vous retrouvez avec un objet Long, mais avec l'auto-sélection, vous pouvez l'utiliser presque comme un long primitif.
Une autre option consiste à utiliser des génériques:
Iterator<Long> itr = val.iterator();
Long a = itr.next();
La classe Number
peut être utilisée pour surmonter le transtypage de type de données numérique.
Dans ce cas, le code suivant peut être utilisé:
long a = ((Number)itr.next()).longValue();
J'ai préparé les exemples ci-dessous:Object
à long
exemple - 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() );
Console sortie serait:
1416313200307
Object
à double
exemple - 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");
Console sortie serait:
0.11
Object
à double
exemple - 3
Faites attention à ceci simple erreur ! Si une valeur float est convertie à l'aide de la fonction doubleValue()
, la première valeur peut ne pas être égale à la valeur finale.
Comme indiqué ci-dessous 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");
Console sortie serait:
0.10999999940395355
Object
à float
exemple - 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");
Console sortie serait:
0.11
Essayez: long a = ((Long) itr.next()).longValue();
Vous devez utiliser les nouvelles fonctions génériques de Java 5.
Lorsque vous retirez un élément d'une collection, vous devez le convertir en type d'élément stocké dans la collection. En plus d'être gênant, c'est dangereux . Le compilateur ne vérifie pas que votre distribution est identique au type de la collection. Elle peut donc échouer au moment de l'exécution.
Les génériques vous permettent de communiquer le type d'une collection au compilateur, afin que celui-ci puisse être vérifié. Une fois que le compilateur connaît le type d'élément de la collection, il peut vérifier que vous avez utilisé la collection de manière cohérente et peut insérer les conversions correctes sur les valeurs extraites de la collection.
Vous pouvez lire ce rapide howto ou ce plus complet tutoriel .
dans mon cas, j'ai un tableau d'objets que je reçois d'un client flex,
parfois les nombres peuvent être interprétés par Java comme int et parfois aussi longs,
donc pour résoudre le problème, j'utilise la fonction 'toString ()' comme suit:
public Object run(Object... args) {
final long uid = Long.valueOf(args[0].toString());
J'ai rencontré le même problème mais en codant JSP. Les suggestions susmentionnées concernant les médicaments génériques et les médicaments génériques ne fonctionnaient pas ou ne correspondaient pas au fragment de code.
Je devais le résoudre comme ça (dans JSP):
<%Object y=itr.next(); %>
et ensuite utilisez mon objet y comme <% = y%> comme nous utiliserions toute autre variable Java dans un scriptlet.
long value = Long.parseLong((String)request.getAttribute(""));