Я пишу (в настоящее время) основанную на String игру Pokemon в Java. С имеющейся у меня структурой в настоящее время есть 2 вида объектов, для которых я хочу сделать сопоставления типов: Pokemon и move. Метод, который я хочу написать (isStrongAgainst ()), будет одинаковым для обоих. Например, покемон типа воды и ход типа воды сильны против покемона огненного типа, но эти сравнения могут подразумевать разные вещи в зависимости от контекста. Оба класса по-разному реализовали методы isType ().
У меня была идея использовать интерфейс, который реализует метод isStrongAgainst () по умолчанию и объявляет абстрактный метод isType (). Я думаю, что, поскольку любой класс, который реализует этот интерфейс, должен был бы реализовать isType (), я мог бы использовать его в своем isStrongAgainst (), но я не могу. Есть ли способ обойти это или лучшее предложение, учитывая мою проблему?
public interface TypeMatch<T> {
boolean isType(Type t);
default boolean isStrongAgainst(Pokemon opponent){
if(T.isType(Type.NORMAL)){
return false;
}
if(T.isType(Type.WATER)){
return opponent.isType(Type.FIRE) ||
opponent.isType(Type.ROCK) ||
opponent.isType(Type.GROUND);
} //etc...