Método de extracción, genéricos, reflexión.

Primer código:

    Bond[] bonds = null;
    try
    {
        JSONArray jsonArray = new JSONArray(result);
        bonds = new Bond[jsonArray.length()];
        for (int i = 0; i < jsonArray.length(); i++)
        {
            JSONObject json = jsonArray.getJSONObject(i);
            bonds[i] = new Bond(json);
        }
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }

Segundo:

    Announcement[] announcements = null;
    try
    {
        JSONArray jsonArray = new JSONArray(result);
        announcements = new Announcement[jsonArray.length()];
        for (int i = 0; i < jsonArray.length(); i++)
        {
            JSONObject json = jsonArray.getJSONObject(i);
            announcements[i] = new Announcement(json);
        }
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }

Estoy pensando en extraer un método que cubra estos dos códigos. Creo que el método debería verse más o menos así:

static Object[] getObjectsArray(String jsonString, Class<?> cls)
{
    Object[] objects = null;
    try
    {
        JSONArray jsonArray = new JSONArray(jsonString);
        objects = (Object[]) Array.newInstance(cls, jsonArray.length());
        for (int i = 0; i < jsonArray.length(); i++)
        {
            JSONObject json = jsonArray.getJSONObject(i);
            objects[i] = new Announcement(json); // FIXME: How to pass "json" arg to the constructor with cls.newInstance()?
        }
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }
    return objects;
}

Entonces, en lugar del primer código, puedo llamar Bond[] bonds = (Bond[]) getObjectsArray(jsonArray, Bond) .

Esta es la línea más problemática:

objects[i] = new Announcement(json); // FIXME: How to pass "json" arg to the constructor with cls.newInstance()?
Respuesta 1

Puede usar la siguiente sintaxis para usar un constructor con argumentos (supongo que el argumento del constructor es a JSONObjecty que el constructor es público; si no lo es, use el getDeclaredConstructormétodo):

Class<Announcement> cls = Announcement.class; //the second argument of your method
objects[i] = cls.getConstructor(JSONObject.class).newInstance(json);
Respuesta: 2

Quiero poder imprimir un número variable de elementos de mi matriz en cada línea. Cadena [] nombre = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi", "George", "Gregory", "Paul", ...

Tengo un programa Java con un Mapa de tipo <String, Project> que contiene todos los objetos del Proyecto y cada objeto del Proyecto contiene una Lista de objetos de Proceso relacionados, es decir, Lista <Proceso>. ...

Estoy tratando de descargar una imagen de Internet para mostrarla en un complemento. Este complemento utiliza JEditorPane y contiene contenido html. He intentado usar un código HTML simple que funcionaría en HTML normal: ...

Tengo un objeto Map Map <Integer, User> donde las identificaciones del usuario se asignan al objeto User que tiene id, firstName, lastName, Name, email, zipCode, country, state ¿Cómo lo reduzco a un Map que ...