Не знаю правильно ли поставлен вопрос, но по коду будет видно в чём его суть. Есть класс, использующий обобщение.
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. Как устранить эту ошибку?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей