tengo la siguiente interfaz:Cómo especificar una lista genérica Serializable
public interface Result<T extends Serializable> extends Serializable{
T getResult();
}
Con esa interfaz, que no se puede definir una variable de tipo
Result<List<Integer>>
porque Lista no es serializable.
Sin embargo, si cambio de la interfaz para esto:
public interface Result<T> extends Serializable{
T getResult();
}
Ahora se hace imposible poner en práctica, con la comprobación de tiempo de compilación, porque no hay ninguna garantía de que T es serializable, y el punto central de la clase es almacenar el resultado para poder recuperarlo más tarde, posiblemente después de una transferencia a través de Internet.
Mi pregunta es esta, ¿hay alguna manera de declarar una variable para que sea de dos tipos, o hay alguna otra forma de hacer esto que no estoy viendo? Por lo tanto, tal vez algo como:
(List<Integer> extends Serializable) value = new ArrayList();
Estoy tratando de poner la mayor parte de la carga de este problema sobre la aplicación, para que los futuros consumidores de esta interfaz no son conscientes del problema.
Gracias por su ayuda!
Aquí hay un ejemplo más detallado de lo que estoy tratando de hacer: Estoy llamando a un servidor, El resultado del cual quiero almacenar en un objeto de resultado, pero no quiero tener que lidiar con el casting. Por lo tanto, cada método que se pueda llamar en el servidor definirá el tipo de resultado mediante el uso de genéricos. Este objeto de resultado también almacenará otros metadatos sobre el resultado, por ejemplo, tal vez haya demasiada información para devolver. En muchos casos quiero usar una lista, pero la interfaz de la Lista no es serializable, aunque muchas de las implementaciones sí lo están.
Entonces, ¿cómo especifico que el tipo utilizado debe ser Serializable, pero aún permitir el uso de una Lista (y no una implementación específica de la Lista)?
¿Puede aclarar lo que está tratando de hacer? Tal vez dar un ejemplo más grande? –
Debe saber que incluso si T está marcado como serializable, aún puede contener una referencia a un objeto que no es serialiazble. Por lo tanto, pasará el análisis estático de genéricos pero fallará en el tiempo de ejecución. – Patrick
Cierto, pero ese es un error que cometió el consumidor y no un defecto en mi código. Si un consumidor declara algo como serializable y luego no sigue los requisitos de ser serializable, no hay nada que pueda hacer. – Megamug