我正在尝试创建DI容器get
方法,但是在签名方面很挣扎。目前我有这个定义:
public Object get(Class<?> key) {
// returns instance of `?`
}
我不太喜欢的代码部分是
get
方法的用法:IRouter router = (IRouter) container.get(IRouter.class);
在这里我必须使用
(IRouter)
强制返回。有什么想法如何更改方法签名以进行这种用法?IRouter router = container.get(IRouter.class);
预先感谢您的任何想法!
最佳答案
通过使用范围限定方法的参数化类型:
public <T> T get(Class<T> key) {
// ...
return (T) foo;
}
在这里,我想
foo
不能键入为T
。如果已将其键入为
T
,则当然可以不进行强制转换就将其返回。您可以这样调用它:
IRouter router = container.get(IRouter.class);
关于java - 如何改善Java通用通配符签名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54968499/