R
Roger Levy
I think I have hit up against an interesting limitation of generics in
Java, and I want to confirm that I'm understanding the limitations
properly. I would like to write a method that takes a parameterized
Collection of type C<A>, and apply to each member of the Collection a
method that takes an A and returns a B. The result should be a
Collection of type C<B>. The code would ideally look something like:
public <A, B, C extends Collection> C<B> applyAll(C<A> as,
Function<A,B> f) {
C<B> result = (C<B>) as.getClass().newInstance();
for(A a : as)
result.add(f.apply(a));
return result;
}
with the appropriate exception handling. But it seems like this is
impossible because type parameters themselves cannot be
parameterized. Is there a way around this limitation that I haven't
thought of?
Many thanks!
Roger
Java, and I want to confirm that I'm understanding the limitations
properly. I would like to write a method that takes a parameterized
Collection of type C<A>, and apply to each member of the Collection a
method that takes an A and returns a B. The result should be a
Collection of type C<B>. The code would ideally look something like:
public <A, B, C extends Collection> C<B> applyAll(C<A> as,
Function<A,B> f) {
C<B> result = (C<B>) as.getClass().newInstance();
for(A a : as)
result.add(f.apply(a));
return result;
}
with the appropriate exception handling. But it seems like this is
impossible because type parameters themselves cannot be
parameterized. Is there a way around this limitation that I haven't
thought of?
Many thanks!
Roger