Új hozzászólás Aktív témák

  • Karma
    félisten

    Valóban működik így, ezt nem tudtam. A TypeToken működését alapvetően ismerem, elkéri a getGenericSuperClass az anonymous TypeToken classtól, aminek aztán a generikus paramétereit le lehet kérni, ez akkor segít, hogy ha mondjuk Map<String, Integeter> van a TypeTokenben. De azt nem tudtam, hogy a fielden is megmarad a generikus infó.

    Szerk.: Simán LogHolder.class-t átadva, TypeToken nélkül is működik... Elnéztem valamit?

    public class Main {

    public static void main(String[] args) {

    Gson gson = new Gson();

    String json = "{\"elements\":[{\"sensor\":\"2\"}]}";
    LogHolder fromJson = gson.fromJson(json, LogHolder.class);
    System.out.println(fromJson);
    }

    }

    public class LogHolder {

    public LogHolder(List<ArrayElement> elements) {
    this.elements = elements;
    }

    private List<ArrayElement> elements;

    public List<ArrayElement> getElements() {
    return elements;
    }
    }

    public class ArrayElement {

    public ArrayElement(String sensorData) {
    this.sensorData = sensorData;
    }

    @SerializedName("sensor")
    private String sensorData;

    public String getSensorData() {
    return sensorData;
    }
    }

    Hm. Határozottan emlékszem pedig, hogy TypeToken nélkül nekem ez a felállás nem működött, a Listbe ArrayElement példányok helyett Map<string, object>-ek kerültek - ami futásidőben ClassCastExceptiont okozott.

    Az egyetlen különbség, amit így ránézésre látok az, hogy én default constructort hagytam az osztályban, míg nálad van egy elements paramétere. Nem tudom, emiatt tudja kitalálni, vagy sem, de mindenképpen érdekes. :F

    Majd kísérletezek én is kicsit.

Új hozzászólás Aktív témák