¿Es posible utilizar un genérico que extienda una clase que contenga un genérico?

CorePress2024-01-24  14

Un ejemplo de esto es: SBHttpRequest<D extiende SBHttpDeserializer<?>, RBT> : esto se compila bien pero el tipo no está limitado para la clase de respuesta

SBHttpRequest<D extiende SBHttpDeserializer<RT>, RBT> : Esto no se compila: RT no se puede resolver en un tipo

También probé SBHttpRequest<D<RT> extiende SBHttpDeserializer<RT>, RBT>: lo cual me dice el < > están en los lugares equivocados

D es la clase deserializador que extiende SBHttpDesrializer RT es el tipo de respuesta o el tipo al que el deserializador cambia la respuesta RBT es el tipo de cuerpo de la solicitud (siempre un byte[] en este caso)

Me gustaría utilizar el tipo de respuesta para delimitar algunas condiciones en la clase y borrar algunas advertencias del compilador de tipos sin formato.

"También probé SBHttpRequest<D<RT> extiende SBHttpDeserializer<RT>, RBT>" - Agregar RT como parámetro genérico: SBHttpRequest<RT, D<RT> extiende SBHttpDeserializer<RT>, RBT>

-Turing85

27/03/2021 a las 19:56

El único problema con esa solución es que requerirá que otros proyectos que la utilicen agreguen el tipo de respuesta, pero puede ser suficiente.

-Saitx

27/03/2021 a las 20:07



------------------------------------

Agregue un parámetro de tipo genérico para el tipo de retorno o cree una clase/interfaz cuando desee bloquear el tipo:

class ByteArraySBHttpDeserializer implements SBHttpDeserializer<byte[]> {}

Entonces:

SBHttpRequest< ByteArraySBHttpDeserializer, RBT>

Es un poco complicado, pero también lo son los genéricos.



------------------------------------

Terminé yendo conLa idea de Turing85.

Solo incluye el tipo

A pesar de la queja de sonarlint acerca de que los nombres genéricos tienen más de 1 carácter: clase pública SBHttpRequest<RESPONSE_TYPE, DESRERIALIZER_TYPE extiende SBHttpDeserializer<RESPONSE_TYPE>, REQUEST_BODY_TYPE>

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare