# Cast von Long zu Integer funktionert nicht



## Zwicke85 (25. Nov 2010)

Hallo Community,

ich schreibe eine Anwendung in Eclipse, die Tweets in Form von Ereignissen verarbeitet.
Eine Engine verarbeitet sie mittels einem für sie angepassten SQL Statement:

Insert Into CountEvent 
Select  brand, period, count(*) as count 
From TimeEvent 
Group by brand, period

Der Input-Eventtyp der Engine ist TimeEvent und der Output-Typ CountEvent, da sich die Datenstruktur ändert (+ count-Attribut & Wegfall anderer Attr.).

Ein Listener der Engine empfängt den Output als HashMap. Diese soll zu einem Objekt gecastet und in einer Datenbank abgelegt werden. Dafür fragt der Listener die Attribute der HashMap ab und bildet das neue Ereignis-Objekt. (Ein Cast von HashMap zu einem OutputEvent-Objekt hat ebenfalls nicht funktioniert)

Da die Engine das count-Attribut als Long-Objekt erzeugt, ich es aber als Integer haben möchten, habe ich einen entsprechenden Cast implementiert. Das Problem ist nun bei der Ausführung des Programms in Eclipse, dass ich dennoch eine ClassCastException bekomme:

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

Ich hoffe, ihr seht meinen Fehler und könnt mir helfen *please*

Vielen Dank vorab.

Viele Grüße
Antje


```
package SocialMediaCEP.Listener;

import org.apache.log4j.Logger;
import SocialMediaCEP.Database.Database;
import SocialMediaCEP.EventBean.CountEvent;
import SocialMediaCEP.Network.*;
import SocialMediaCEP.Statement.StatementBrandMonitor;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.UpdateListener;


public class ListenerCount implements UpdateListener{
	
	private static Logger log = Logger.getLogger(ListenerCount.class);
	private Database db = new Database();
	
	public void update(EventBean[] newData, EventBean[] oldData) {
		
			if (newData == null) {
			return;
			}
			
			int anzahl = newData.length;
			
			for (int i= 0; i < anzahl; i++){
					
				int count = (Integer) newData[i].get("count");
				String brand = (String) newData[i].get("brand");
				String period = (String) newData[i].get("period");
			        CountEvent event = new CountEvent(count, brand, period);
				
			}
	}
}
```


----------



## Niki (25. Nov 2010)

```
int count = ((Long) newData[i].get("count")).intValue();
```


----------



## Gast2 (25. Nov 2010)

```
int count = (Integer) newData[i].get("count");
```
Dort wird wohl ein Long zurückgegeben, das kannst du nicht einfach auf Integer casten.
Um den Wert in einen Integer zu wandeln kannst du intValue() (der klasse Long) verwenden.


----------



## Zwicke85 (25. Nov 2010)

Das hat geklappt.:toll: Danke euch.:applaus:

Ich weiß, ich hatte die Methode bereits ohne Erfolg ausprobiert, aber wohl mit einem Syntaxfehler :rtfm:


----------

