Как преобразовать объект к обобщению?

169
16 апреля 2018, 01:14

Не знаю правильно ли поставлен вопрос, но по коду будет видно в чём его суть. Есть класс, использующий обобщение.

public abstract class TypeAdapter<T> {
    public void write(JsonWriter out, T value) throws IOException {
        if (value == null) {
            out.nullValue();
        } else {
            TypeAdapter.this.write(out, value);
        }
    }
    public abstract void write(JsonWriter jsonWriter, T t) throws IOException;
}

Пытаюсь воспользоваться данным классом:

public void toJson(Object src, Type typeOfSrc, JsonWriter writer) throws JsonIOException {
    TypeAdapter<?> adapter = getAdapter(TypeToken.get(typeOfSrc));
    try {
        adapter.write(writer, src); //Вот здесь компилятор ругается. Как - смотрите ниже.
    } catch (Throwable e) {
        throw new JsonIOException(e);
    } 
}

Как ругается: пишет, что ожидает '?', а получает java.lang.Object. Но ведь '?' - это просто абстракция, демонстрирующая, что непонятно какой тип будет на этапе объявления переменной. По сути, тип будет понятен только в рантайме. К тому же, что может быть более абстрактней java.lang.Object? Как пыталась решить эту проблему:

TypeAdapter<src.getClass()> adapter = getAdapter(TypeToken.get(typeOfSrc));

Но, видимо, нельзя так в Java. Как устранить эту ошибку?

READ ALSO
Java 10, IntellIJ не могу установить 10 programming language level

Java 10, IntellIJ не могу установить 10 programming language level

Привет! Появилась у меня проблема с jdk 10 (183)

196
Обновление поля timestamp в классе SoftReference

Обновление поля timestamp в классе SoftReference

В исходном коде класса SoftReference есть такое поле:

158
Стоит ли переходить на обучение Java 10?

Стоит ли переходить на обучение Java 10?

Стоит ли бросать Java 8 и продолжать свое обучение с Java 10? Тем более, как я слышал, они рассматривают идею перейти на полугодовой график релизов...

118
sendRedirect на предыдущую страницу при смене языка

sendRedirect на предыдущую страницу при смене языка

Проблема в следующем - хочу сделать мультиязычное Java web-приложение, чтобы во всех страницах приложения была возможность переключаться между...

125