Java has "type erasure", which means that generic information doesn't exist at runtime. It's only used by the compiler. So the following signatures:
both compile to the signature:
which means you get a conflict.
Bruno Sant Ana
Joined: May 17, 2012
OK, but I'm not trying to use both at the same time like this:
Bruno Sant Ana wrote: ... but when I try to replace the concatenarTextos method by this one bellow it throws an exception:
this exception is thrown:
java.lang.ClassFormatError: Duplicate field name&signature in class file certificacao/generics/ImplementacaoGenerica
why does it occurs?
Well, both "T" and "U" can be String objects (or can be Object objects -- the super of String). Question: assuming that they are *not* string objects, then how should the compiler perform the "t+u" operation?
Bruno Sant Ana wrote:OK, but I'm not trying to use both at the same time...
Ah, sorry, I misunderstood.
The reason you get an error (and I get a different error to the one you reported) is that super isn't allowed as a bound on a type variable. You can have lower bounds on wildcard type arguments, but not where you've used them.
Unlike ordinary type variables declared in a method signature, no type inference is required when using a wildcard. Consequently, it is permissible to declare lower bounds on a wildcard, using the following syntax, where B is a lower bound: