如何改进 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);
我正在尝试创建 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);