我正在尝试创建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/

10-10 16:41