java中文 - 無法轉換為Java中的擴展類




java extends keyword (2)

jsonClients.getJSONObject(0)返回一個JSONObject類型的對象,它是你的父類型。

您不能將其轉換為繼承類型。 它只能以另一種方式工作,即將繼承的類轉換為父類。 這與你的對象無關,特別是繼承的方式。

由於您從方法中獲取了JSONObject的實例,並且無法控制如何實例化,所以您可以向MyJSONObject類添加構造函數以從父對象創建一個對象:

public MyJSONObject(JSONObject parent) {
    super(parent.toString());
}

並以這種方式使用它:

JSONObject parent = jsonClients.getJSONObject(0);
MyJSONObject child = new MyJSONObject(parent);

我四處尋找一個類似的問題,但找不到任何匹配它的東西。

我試圖擴展內置的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


你所遇到的問題是JSONArray內的對象(我假定JSONArrayMyJSONObject由庫創建的)不包含由你定義的MyJSONObject對象。

只有您自己創建了JSONArray並使用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
}




extends