[英]Cannot cast to an Extended Class in Java
我環顧四周尋找類似的問題但找不到與之相符的東西。
我正在嘗試擴展內置的JSONObject以添加一些功能,如下所示:
public class MyJSONObject extends JSONObject {
// Easily return an integer from a JSONObject, handling when the value is null.
//
public Integer getIntegerUnlessNull(String key) throws JSONException {
String key_value = this.getString (key);
if ( key_value.equals("null") ) {
return null;
} else {
return Integer.parseInt( key_value );
}
}
}
但是,當我嘗試轉換它時,我得到一個java.lang.ClassCastException
錯誤:
private JSONArray jsonClients;
MyJSONObject clientJSONRecord;
clientJSONRecord = (MyJSONObject) jsonClients.getJSONObject(0);
完整的錯誤消息是:
java.lang.ClassCastException: org.json.JSONObject cannot be cast to com.insightemissions.trak.extensions.MyJSONObject
有幫助嗎?
干杯,
J.P
jsonClients.getJSONObject(0)
返回JSONObject
類型的對象,它是您的父類型。
您無法將其強制轉換為繼承的類型。 它只能以另一種方式工作,即將繼承的類轉換為父類。 這與您的對象無關,它只是繼承的工作方式。
因為從方法中獲取了JSONObject
的實例,並且無法控制它的實例化方式,所以可以在MyJSONObject
類中添加一個構造函數,以便從父對象創建一個對象:
public MyJSONObject(JSONObject parent) {
super(parent.toString());
}
並以這種方式使用它:
JSONObject parent = jsonClients.getJSONObject(0);
MyJSONObject child = new MyJSONObject(parent);
您遇到的問題是JSONArray
中的對象(我假設JSONArray
對象是由庫創建的)不包含您定義的MyJSONObject
對象。
只有在您自己創建JSONArray
並使用MyJSONObject
對象填充它時,您的代碼才MyJSONObject
。
鑒於你試圖通過這種“擴展功能”實現的目標,我認為繼承是一種過度殺傷力。
為什么不使用輔助方法?
public Integer getIntegerUnlessNull(JSONObject, String key) throws JSONException {
String key_value = object.getString (key);
if ( key_value.equals("null") ) {
return null;
} else {
return Integer.parseInt( key_value );
}
}
然后你可以這樣做:
Integer getInteger = getIntegerUnlessNull(object, "key");
if (getInteger == null) {
// if null do something
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.