quiero dar algo como esto en mi api:anidada genérica en una clase genérica
class Foobar extends AbstractThing<Double>
class EventThing<Foobar> {
public Foobar getSource();
public Double getValue();
}
así que escribir esto:
class EventThing<T extends AbstractThing<U>> {
public T getSource();
public U getValue();
}
Pero Java no puede resolver el U
.
Con EventThing<T extends AbstractThing<U>,U>
en su lugar funciona, pero el segundo U
es realmente redundante porque el AbtractThing ya define el Tipo. Entonces me encanta deshacerme de eso.
Me parece más a una característica que falta del compilador. EDITAR: Pero entiendo su punto, gracias por su respuesta. Para mal. Creo que dejaré la característica del hoyo. –
@Marcel: Creo que esta respuesta explica con bastante claridad por qué el compilador no puede (y no debe) intentar adivinar si 'U' es un tipo real o un parámetro de tipo genérico. Java requiere que cada parámetro de tipo genérico sea declarado explícitamente por una buena razón. Independientemente de lo que te parezca, esta no es una "característica que falta en el compilador". – ColinD
@ColinD: estoy de acuerdo con Marcel en que parece una característica faltante y U en su ejemplo parece redundante. Mientras, obviamente, el compilador debe ser informado de que U es un argumento tipo, podríamos tener algo como: class EventThing>, diciendo esencialmente: U es un parámetro de tipo variable, ahora ve e infórmalo tú mismo (character% used solo para discusión, estoy de acuerdo que es feo). De esta manera no habría repetición en el código de llamada. –
Gilead