2015-12-09 11 views
8

Mam kolejny problem przy użyciu Modernizacja 2 Beta 2:interfejsy API nie musi rozciągać się inne interfejsy Modernizacja 2

java.lang.IllegalArgumentException: API interfaces must not extend other interfaces. 

To dlatego, że mam jeden interfejs API z Retrofit jak ten:

public interface RetrofitBaseAPI { 

    @POST 
    Call<LoginResp> login(@Url String url, @Body LoginReq loginReq); 

    @POST 
    Call<String> logout(@Url String url, @Header("Cookie") String sid); 
} 

na przykład, jednym z nich jest to jedno:

public interface RetrofitWiserLinkAPI extends RetrofitBaseAPI { 

    @GET("/rs/DeviceIdentification") 
    Call<DeviceId> getDeviceIdentification(@Header("Cookie") String sid); 
} 

A potem, mam trzy inne interfejsy, trzy z następujących m rozciąga się od tego interfejsu RetrofitBaseAPI.

Kiedy próbuję wywołać retrofit.create (klasa klasy) z podanym interfejsem, zawsze otrzymuję ten błąd.

Jeśli chodzi o czytanie, jedynym rozwiązaniem jest utworzenie trzech niezależnych interfejsów. Czy to prawda? Ktoś zna inne rozwiązanie?

znajdę trochę dziwne, że musimy powielać kodu, ale również, a może nie ma powodu nie rozumiem .....

Z góry dzięki!

Dzięki,

EDIT: sam problem przy użyciu ostatecznej Modernizacja 2 wersja. Domyślam się, że jest to ograniczenie z Retrofit ....

+2

nie jest to niemożliwe. Możesz przeczytać więcej [tutaj] (https://github.com/square/retrofit/pull/676) – Blackbelt

+0

Wielkie dzięki za odpowiedź! A ograniczenie jest z jakiegoś szczególnego powodu wydajności, projektowania itp.? Czy może tylko zmniejszyć możliwe przypadki użycia? – zapotec

+0

@zapotec "Retrofit sprzyja kompozycji, która dodaje dziedziczenie." powiedział ktoś ... –

Odpowiedz

10

Nie można mieć podstawowego interfejsu do modernizacji.

JakeWharton:

Modernizacja sprzyja kompozycję nad dziedziczenie. Jeden interfejs na usługę.

Tak jak już się dowiedziałeś, jedynym rozwiązaniem jest utworzenie trzech niezależnych interfejsów.

+4

Co za żałosny: - / – Matthias