Я создал универсальный интерфейс.
public interface Abc<T> {
void validatePojo(T input);
}
Следующие два класса являются реализацией вышеуказанного интерфейса.
1)-----------------------------------------------
public class Hello implements Abc<Pojo1> {
@Override
public void validatePojo(Pojo1 input) {
// some code
}
}
2)-----------------------------------------------
public class Hi implements Abc<Pojo2> {
@Override
public void validatePojo(Pojo2 input) {
// some code
}
}
Теперь, когда я пытался создать объект Abc,
T input = getInput(someInput); // getInput return either Pojo1 or Pojo2
Abc abc = someFactory(someInput); //someFactory(someInput) will return either `new Hello()`
^ //or `new Hi()` based on `someInput`
|
+-------------------------------//warning
abc.validate(input);
public Abc<?> someFactory(final int input) {
return input == 1 ? new Hi() : new Hello();
}
public T getInput(final int input) {
return input == 1 ? new Pojo1() : new Pojo2();
}
Я получаю пари Abc is a raw type. References to generic type Abc<T> should be parameterized
.
Как я могу восстановить это предупреждение?
Я посмотрел в интернете, нашел следующее, но это не оченьполезно.
- Один из найденных мной способов - использовать
@SuppressWarnings
. - Объявить переменную, например
Abc<Pojo1> abc
или Abc<Pojo2> abc
, я не могу сделать это как использовать Pojo1или Pojo2 полностью зависит от ввода (я не хочу писать здесь логику фабричного метода)
Есть ли другой способ восстановить его?