Retrofit2 Несоответствие ответа сервера

Я нашел общий и простой способ сделать это. В моем классе я создал метод, который возвращает общий тип в соответствии с его положением в определении класса. Давайте предположим определение класса следующим образом:

public class MyClass<A, B, C> {

}

Теперь давайте создадим некоторые атрибуты для сохранения типов:

public class MyClass<A, B, C> {

    private Class<A> aType;

    private Class<B> bType;

    private Class<C> cType;

// Getters and setters (not necessary if you are going to use them internally)

    } 

Затем вы можете создать общий метод, который возвращает тип на основе по индексу общего определения:

   /**
     * Returns a {@link Type} object to identify generic types
     * @return type
     */
    private Type getGenericClassType(int index) {
        // To make it use generics without supplying the class type
        Type type = getClass().getGenericSuperclass();

        while (!(type instanceof ParameterizedType)) {
            if (type instanceof ParameterizedType) {
                type = ((Class<?>) ((ParameterizedType) type).getRawType()).getGenericSuperclass();
            } else {
                type = ((Class<?>) type).getGenericSuperclass();
            }
        }

        return ((ParameterizedType) type).getActualTypeArguments()[index];
    }

Наконец, в конструкторе просто вызовите метод и отправьте индекс для каждого типа. Полный код должен выглядеть так:

public class MyClass<A, B, C> {

    private Class<A> aType;

    private Class<B> bType;

    private Class<C> cType;


    public MyClass() {
      this.aType = (Class<A>) getGenericClassType(0);
      this.bType = (Class<B>) getGenericClassType(1);
      this.cType = (Class<C>) getGenericClassType(2);
    }

   /**
     * Returns a {@link Type} object to identify generic types
     * @return type
     */
    private Type getGenericClassType(int index) {

        Type type = getClass().getGenericSuperclass();

        while (!(type instanceof ParameterizedType)) {
            if (type instanceof ParameterizedType) {
                type = ((Class<?>) ((ParameterizedType) type).getRawType()).getGenericSuperclass();
            } else {
                type = ((Class<?>) type).getGenericSuperclass();
            }
        }

        return ((ParameterizedType) type).getActualTypeArguments()[index];
    }
}
1
задан WeeHong 14 July 2018 в 01:12
поделиться

1 ответ

вы можете использовать ключ «результат» несколько раз, зависит от состояния ответа, подобного этому

`       @Json(name = "status") val status: Boolean?,
        @Json(name = "code") val code: Int?,
        @Json(name = "result") val message: String?,
        @Json(name = "result") val result: ResultObject?,
        @Json(name = "result") val validation: HashMap<String,List<String>>?
`

, и зависит от ключа статуса «ur», вы можете получить правильные значения из правильного «результата» сделав условия.

0
ответ дан Mohamed Fawzy 17 August 2018 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: