Consider:
public interface Foo<T> {
public static class X{}
public void foobar(T t);
}
public class Bar<X> {
Foo<X> foo = new Foo<X>() {
public void foobar(X t) {}
};
}
I found no way to express that I mean the X
from Bar<X>
and not Foo.X
in the foobar(X t)
implementation. Is there no other way than renaming the generic parameter X
in Bar
or the static inner class?
I don't think there is a way to disambiguate to the type parameter, and I think that that was a reasonable design decision to make.
X
in Bar<X>
. In other words, if you had the ability to say foobar(TypeParameter.X t)
you would have the ability to simply use something other than X
for the type parameter on Bar
. Renaming X
is the way you avoid name clashes.Don't forget that type parameter names don't leak out to other classes in more than trivial ways. You are never forced to use a certain type parameter name, ever. So it makes sense that the language designers wouldn't have thought this is worth adding complexity to the language for.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With