2016-11-01 4 views
1

J'ai ce code qui me donne une erreur?Comment convertir un objet en type de données long java

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

Ci-dessous est l'erreur:

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

Je ne sais pas pourquoi il jette une exception.

+4

'java.lang.Integer' _cannot_ être jeté à' java.lang.Long'. –

Répondre

4

Comme cela a été expliqué dans les commentaires, Java n'autorise pas la conversion d'un type de wrapper primitif en un autre type de primitive, même si la conversion est autorisée sur les primitives elles-mêmes.

Votre exception stacktrace montre que le paramètre clé est un objet Integer. Si oui, alors il suffit d'utiliser la méthode de Integer créé spécifiquement pour ce type de conversion:

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

Vous feriez mieux d'être bien sûr que la clé est toujours un objet Number et non nul pour que cela fonctionne. Vous devrez peut-être tester null avant d'appeler cette méthode.

+1

Merci de faire cet aéroglisseur. J'étais attaché pendant un moment. –

1

Vous ne pouvez pas lancer Integer à Long, même si vous pouvez convertir int à long. Cela fonctionnerait pour vous:

Long clientId = new Long(key) 

NPE est levée si l'entier est null. Je vais laisser l'erreur de traitement à vous cependant. :)

Vous pouvez également utiliser:

Long clientId = Long.valueOf(key.longValue());