У меня возникли проблемы с пониманием того, почему жалобное затмение жалуется. У меня есть два интерфейса:Общий класс, понять общие параметры
@Preload
public interface KBaseAo extends FAQ
{
public static final String ID = "BASE_KEY";
}
public interface FAQ extends Entity {
@Unique
@NotNull
String getBaseKey();
void setBaseKey(String baseKey);
@NotNull
String getExcerpt();
void setExcerpt(String excerpt);
}
где интерфейс Entity:
public interface Entity extends RawEntity<Integer> {
@AutoIncrement
@NotNull
@PrimaryKey("ID")
public int getID();
}
Конкретный класс выглядит следующим образом:
public class FAQServiceImpl<T extends FAQ> {
private void save(Class<T> clazz, String ID_FIELD, String key, String excerpt) {
T entity = (T) aoManager.create(clazz, new DBParam(ID_FIELD, key),
new DBParam("EXCERPT", excerpt));
entity.save();
}
private <T extends FAQ> void save2(Class<T> clazz, String ID_FIELD, String key, String excerpt) {
T entity = (T) aoManager.create(clazz, new DBParam(ID_FIELD, key),new DBParam("EXCERPT", excerpt));
entity.save();
}
public Map<String, String> fetchExcerptsFor(Set<String> bodies) {
//call save2 or save here
}
}
Я пытаюсь вызвать сохранить как
save(KBaseAo.class, "SomeID", "SomeStr", "SomeStr");
, который дает ошибку компиляции
The method save(Class<T>, String, String, String) in the type FAQServiceImpl<T> is not applicable for the arguments (Class<KBaseAo>, String, String, String)
Вызов save2 точно так же
save2(KBaseAo.class, "SomeID", "SomeStr", "SomeStr");
компилируется отлично, но переписывает тип T.
Что мне не хватает и не могу заставить save() работать?
Edit: Добавлен код вызова из двух сохраняет
Где вы вызываете 'save' (или' save2') с 4 параметрами? Похоже, вы делаете это в методе экземпляра 'FAQServiceImpl', поэтому 'T' не обязательно' KBaseAo'. –
Как объект, на который вы ссылаетесь, объявляете эти методы? –