我是Esper的新手,並創建了一個以Map形式提供Esper事件的小程序。Esper將結果轉換爲java.util.Map
我已經添加了一個偵聽器,並且一切都按預期工作,但是,在時間窗口執行count(*)之類的複雜查詢時,我很難將結果作爲java.util.Map返回。無論查詢結果如何,我都可以將結果作爲標準地圖進行進一步處理?
private class EsperUpdateListener implements UpdateListener {
public void update(EventBean[] newEvents, EventBean[] oldEvents) {
System.out.println("Found new event!");
if(newEvents != null) {
System.out.println("newEvents (" + newEvents.length + "):");
for (EventBean e : newEvents) {
System.out.println(" " + e.toString() + "(" + e.getEventType().getName() + ")");
System.out.println(" " + e.getUnderlying().toString());
for (Map.Entry<String,Object> entry : e.getUnderlying().getEntrySet()) {
String key = entry.getKey();
String val = (String)entry.getValue();
System.out.println(" " + key + ": " + val);
}
}
}
if(oldEvents != null) {
System.out.println("oldEvents:");
for (EventBean e : oldEvents) {
System.out.println(" " + e.toString() + "(" + e.getEventType().getName() + ")");
}
}
}
}
我試過上面的代碼,但它抱怨getUnderlying返回一個對象,而不是地圖。我試圖鑄造,這有點兒八九不離十工作,但不是沒有警告:
警告:[選中]選中投
Map<String,Object> emap = (Map<String,Object>)e.getUnderlying();
它返回Object。什麼時候可以安全地假設這實際上是一個Map?我問的原因是,當我明確地將它轉換爲地圖時,編譯器抱怨「警告:[取消選中]未選中投射」。 – agnsaft
檢查底層bean的實例是否會刪除此錯誤? – agnsaft
是的,如果你像下面這樣對底層對象進行適當的'instanceof'檢查沒有警告:'if(eventBean.getUnderlying()instanceof HashMap , ?>)// process data' – Simon