Скажем, у нас есть такой интерфейс:
public interface Validator<T> {
boolean isValid(T data);
}
И это часть основного модуля.Несколько приложений могут использовать один и тот же основной модуль с другим значением для универсального T. Пример реализации (из определенного модуля приложения):
@Component
public class AppValidator implements Validator<String> {
@Override
public boolean isValid(String data) {
return false;
}
}
И затем в контроллере (который является частьюмодуля ядра):
@RestController
public class ValidateController {
@Autowired
private Validator validator;
@RequestMapping("/")
public void index() {
validator.validate("");
}
}
IntelliJ жалуется, что я использую необработанные типы;как вы можете видеть, я фактически делаю это в контроллере.
Мой вопрос: есть ли способ ввести зависимость ограниченным образом (вместо инъекции Validator
, инъекции Validator<String>
)?Но, конечно, связанный тип может меняться в зависимости от приложения, использующего модуль ядра?
Если это невозможно (вероятно, из-за стирания типа), что является лучшим способом для этого?Это просто использовать Object
?Разве нет более приятной альтернативы, которая все еще обеспечивает безопасность типов?
Я видел, как где-то люди говорили, что во время компиляции можно сделать какое-то волшебство, чтобы изменить типы, но я не уверен, как, или дажеесли я прочитал это правильно?
Я использую Spring, так что я надеюсь, что Spring может предоставить мне что-то, чтобы помочь мне здесь!Немного волшебства можно только приветствовать!