2016-03-21 13 views
0

Ich habe folgende Situation:Fehler konvertieren BigDecimal int zu

List<BigDecimal> nvs = servSuperlivelloDAO.findNetworkVersion(year, daynumber); 
int[] res = new int[nvs.size()]; 
for (int i = 0; i < nvs.size(); i++) { 
    res[i] = nvs.get(i).intValue(); 
} 

BigDecimal Umwandlung diesen Fehler zu int gibt:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal

Ich verstehe nicht, warum ich einen Integer in BigDecimal Liste haben.

+1

Bitte stellen Sie ein [MCVE]. Problem ist nicht im gebuchten Code. – Tunaki

+3

scheint, dass '.findNetworkVersion()' tatsächlich Liste von 'Integer' zurückgibt, nicht' BigDecimal' –

Antwort

1

Ich denke, das Problem in der ersten Zeile ist

List<BigDecimal> nvs = servSuperlivelloDAO.findNetworkVersion(year, daynumber); 

Versuchen Sie, die findnetworkVersion() -Methode debuggen. Und überprüfen Sie den Rückgabetyp dieser Methode. (Ist es wirklich List of BigDecimal?).

+0

Das Problem ist nicht so sehr die innere Arbeit von findNetworkVersion (wie durch Debugging enthüllt werden würde), streng genommen nicht der erklärte Rückgabetyp von die Methode. Die primäre relevante Frage ist der Laufzeittyp/s der Objekte in der zurückgegebenen Liste. Sie können diese mit einem Debugger überprüfen, mit einem Aufruf von getClass() und/oder mit instanceof Tests in Ihrem Code. –

+1

Laut der Frage, der Fehler sagt - java.lang.Integer kann nicht in java.math.BigDecimal umgewandelt werden. Das heißt, irgendwo wird Integer zurückgegeben und BigDecimal zugewiesen. Es ist nicht "die Umwandlung von BigInteger zu Integer", wie in der Frage erwähnt (es ist umgekehrt). –

+0

@ OleV.V. Durch Debugging wollte ich herausfinden, was diese Funktion (findNetworkVersion()) zurückgibt. –

-1

Wenn Sasha Vorschlag richtig ist, können Sie wahrscheinlich lösen, indem Sie nvsList<? extends Number> nvs deklarieren (ich habe nicht getestet).

0

Ich denke, dass die DAO-Methode: servSuperlivelloDAO.findNetworkVersion (Jahr, dayNumber) einen Int anstelle eines BigDecimal zurückgegeben. Prüfen Sie ! Hier

ist ein Beispiel, wo der BigDecimal gegossen wurde ohne Fehler in int:

package test; 

import java.math.BigDecimal; 
import java.util.ArrayList; 
import java.util.List; 

public class Main { 
    public static void main(String[] args) { 
     List<BigDecimal> list = new ArrayList<BigDecimal>(); 
     list.add(new BigDecimal(1)); 
     list.add(new BigDecimal(2)); 
     int arr[] =new int[list.size()]; 
     for(int i=0;i<list.size();i++) 
     { 
      arr[i] = list.get(i).intValue(); 
      System.out.println(arr[i]); 
     } 

    } 
}