如何改进 Java 泛型通配符签名

How to improve Java generics wildcard signature

我正在尝试创建 DI 容器 get 方法,但遇到签名问题。目前我有这个定义:

public Object get(Class<?> key) {
  // returns instance of `?`
}

我不太喜欢的代码部分是 get 方法的用法:

IRouter router = (IRouter) container.get(IRouter.class);

我必须将 return 转换为 (IRouter)。任何想法如何更改方法签名以像这样使用?

IRouter router = container.get(IRouter.class);

提前感谢您的任何想法!

通过使用范围方法参数化类型:

public <T> T get(Class<T> key) {
  // ...
  return (T) foo;
}

这里我假设 foo 没有输入 T.
如果它已经被输入为 T 你当然可以 return 它而不用强制转换。

您可以这样调用它:

IRouter router = container.get(IRouter.class);