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

问题描述 投票:1回答:1

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

提前感谢任何想法!

java generics containers wildcard
1个回答
3
投票

通过使用作用域方法参数化类型:

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

在这里,我认为foo不是键入T。 如果它已经被输入为T,你当然可以在没有强制转换的情况下返回它。

你可以调用它:

IRouter router = container.get(IRouter.class);
© www.soinside.com 2019 - 2024. All rights reserved.