假设我们有这样一个界面:
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 可以在这里提供一些帮助!欢迎施展魔法
一只名叫tom的猫
慕哥9229398
相关分类