在c#中,使用 Linq
:
class SimpleIoC
{
object[] registrations = new object[] {
new ServiceA(), new ServiceB(), new ServiceC(), new ServiceA()
};
public IEnumerable<T> GetAll<T>() => registrations.OfType<T>();
}
var ioc = new SimpleIoC();
var serviceAs = ioc.GetAll<ServiceA>();
这在java中可以实现吗?如果是,怎么做?
@Test
public void Testing_stuff() {
ArrayList<Receives<?>> receivers = new ArrayList<>();
receivers.add(new TestReceiver("I picked a bad day to give up learning java..."));
Iterable<Receives<TestMessage>> all = getTheDarnThing(receivers);
}
private <T> Iterable<T> getTheDarnThing(ArrayList<?> list) {
// help me obi-wan kenobi...
return list.stream()
.filter(x -> T.class.isAssignableFrom(x.getClass()))
.map(x -> (T) x) // unchecked
.collect(Collectors.toList());
}
还有,有没有可能知道 T
是否为泛型参数?
1条答案
按热度按时间noj0wjuj1#
在java中,需要传递一些东西来将类型标识为方法的参数,因为类型参数
T
只是编译时构造。通常是Class
使用对象:您可以这样使用它:
注意,在java代码中,列表中的所有对象都是
Receives
使用不同的类型参数初始化。在运行时您将无法区分这两个对象,因为类型参数已被删除。您可以定义专门的类来表示不同类型的“receives”对象。例如:class TestReceives extends Receives<TestMessage>