2015-09-23 120 views
0
int flag = Integer.parseInt((String) arg0.getValueByField(Constants.FLAG)); 

這裏,在風暴arg0.getValueByField(String)返回一個對象類型。在這種情況下,它實際上是一個整數。但是爲了在下一個螺栓中獲得這個值作爲整數,我寫了上面的代碼行。但它是給類拋出異常。你能否建議它有什麼問題(鑄造或什麼?)。我甚至在那之後試過這個:暴風雨 - 類演員異常使用下一個螺栓中的參數

int flag = Integer.parseInt(arg0.getValueByField(Constants.FLAG).toString()); 

但是還是一樣的例外。

+0

如果是*實際上*一個整數,如何將它投射到一個?如果您打印'arg0.getValueByField(...)。getClass()',它會顯示什麼? –

+0

你能添加異常的錯誤信息嗎?如果這個值的類型是Integer,那麼你嘗試的第二行實際上應該可以工作(即使它不是一個很好的解決方案,將Integer轉換爲String並且解析String來獲取int) –

回答

0

發現無論您收到的元組,然後換再換處理它的邏輯......

public void execute(Tuple input) { 

    Object obj = input.getValueByField(Constants.FLAG); 
    int flag; 
    if (obj instanceof Integer){ 
     // 
     flag = (Integer) obj; 
    } 
    else if (obj instanceof String){ 
     flag = Integer.parseInt((String) obj); 

    } 
    else // you are receiving something else that is neither an integer or String 
    { 
     throw new RuntimeException("other class type : "+obj.getClass() 
            +"\t toString(): "+obj.toString()); 
     // your should be able to see this exception on Storm UI 

    } 

    // do your thing 


} 
0

如果arg0.getValueByField(Constants.FLAG)返回的值屬於Integer類型,則不能像這樣將其轉換爲String

簡單使用強制轉換爲Integer

int flag = (Integer)arg0.getValueByField(Constants.FLAG);