Я начал работать с Java недавно и все еще запутался при работе с родовыми типами. Ниже приведен упрощенный сценарий, когда у меня возникают некоторые проблемы.Разрешение родового типа Java
У меня есть класс, которым владеет картой, используя тип класса как ключ и коллекцию объектов этого класса:
public class GenericListInside {
private Map<Class<?>, List<?>> mapping = new HashMap<>();
public <T> void addListing(Class<T> clazz, List<T> object) {
mapping.put(clazz, object);
}
}
Я могу назвать addListing без проблем:
GenericListInside gli = new GenericListInside();
List<Foo> list = new ArrayList<>();
//add something to list
gli.addListing(Foo.class, list);
Теперь я решил создать класс для обеспечения жидкостного интерфейса. Что-то вроде:
with(Foo.class).use(list);
Тогда я пришел с:
public class FluidInserter<T> {
Class<T> clazz;
GenericListInside gli = new GenericListInside();
public FluidInserter with (Class<T> clazz) {
this.clazz = clazz;
return this;
}
public <T> void use(List<T> list) {
gli.addListing(clazz, list);
}
}
Но когда я пытаюсь скомпилировать я получаю:
Error:(18, 12) java: method addListing in class util.GenericListInside cannot be applied to given types;
required: java.lang.Class,java.util.List
found: java.lang.Class,java.util.List
reason: inferred type does not conform to equality constraint(s)
inferred: T
equality constraints(s): T,T
Это сообщение немного сбивает с толку ... может кто-нибудь выяснить, что я делаю неправильно?
Вы правы. Спасибо за ответ и вне темы. – marcellorvalle
@marcellorvalle, пожалуйста! – Mena