Код: Выделить всё
public interface ISettings{
int value();
}
public record ExampleSet1 (int value) implements ISettings{}
public record ExampleSet2 (int value) implements ISettings{}
public class ExampleClass {
private final ExampleSet1 settingsGlobal;
public ExampleClass(ISettings settingsLocal) {
if (settingsLocal instanceof ExampleSet1 set) {
settingsGlobal = set;
} else {
throw new IllegalArgumentException("Settings type mismatch");
}
}
}
Есть вариант реализовать проверку с помощью getClass():
Код: Выделить всё
public class ExampleClass {
private final ExampleSet1 settingsGlobal;
public ExampleClass(ISettings settingsLocal) {
if (!validateSettings(settingsLocal)) {
throw new IllegalArgumentException("Settings type mismatch");
}
settingsGlobal = (ExampleSet1) settingsLocal;
}
private boolean validateSettings(ISettings settingsLocal) {
return settingsLocal.getClass().equals(settingsGlobal.getClass());
}
}
Это упрощенный пример. В действительности может существовать множество классов, содержащих разные типы настроек (но все они поддерживают интерфейс ISettings). Я хотел реализовать проверку в абстрактном классе, чтобы не делать это в каждом используемом классе.
Как проверить соответствие типа settingsGlobal?
Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-a-class