Ich habe eine API-Antwort, die generisch Daten für verschiedene Aktivitäten unserer Anwendung zurückgeben soll. Um die Anwendung so generisch und flexibel wie möglich zu gestalten, haben wir eine API eingerichtet, um eine Sammlung von URLs bereitzustellen, die zur Erstellung verschiedener Zeilen für unsere Aktivitäten verwendet werden können. Unser Basisobjekt wie folgt aussieht:Retrofit-Methode Return-Platzhalter
public class BaseApiObject {
@SerializedName("apiVersion")
private String apiVersion = null;
@SerializedName("totalResults")
private Integer totalResults = null;
}
Unsere Antwort für die Aktivität wie folgt aussieht:
public class ActivityApiResponse extends BaseApiObject {
@SerializedName("results")
private List<ScreenItem> results = new ArrayList<>();
}
Und die ScreenItem wie folgt aussehen:
public class ScreenItem extends BaseApiObject {
@SerializedName("apiUrls")
private List<String> apiUrls = new ArrayList<>() ;
}
Ich möchte in der Lage sein, etwas zu tun so mit Nachrüstung:
@GET("{url}")
Call<? extends BaseApiObject> getUrl(@Path("url") String url);
Wir wissen, dass jede Anforderung, die wir machen, ein BaseApiObject zurückgibt, aber wir sind unsicher, welchen Objekttyp wir tatsächlich zurückgeben werden - und einige dieser URLs werden eine Liste vieler verschiedener Objekttypen zurückgeben.
Wir erhalten die folgende Fehlermeldung:
java.lang.IllegalArgumentException: Method return type must not include a type variable or wildcard: retrofit2.Call<? extends com.company.BaseApiObject>
Gibt es eine Möglichkeit mit Retrofit dieses Szenario zu behandeln oder muß ich die BaseApiObject zurückzukehren, und dann eine benutzerdefinierte Gson Deserializer verwenden, um tatsächlich den richtigen Objekttyp zurückgeben (s)?