¿Es posible convertir un objeto en Java en un tipo genérico combinado?¿Cómo debo convertir Java genérico con múltiples límites?
tengo un método como:
public static <T extends Foo & Bar> void doSomething(T object) {
//do stuff
}
llamada a este método no es problema si tengo una clase que implementa dos interfaces (Foo & bar).
El problema es que cuando necesito llamar a este método, el objeto que necesito pasar se recibe como java.lang.Object
y necesito convertirlo para hacer feliz al compilador. Pero no puedo entender cómo hacer esto.
edición:
El problema radica en una función como esta:
public void problemFunction (Object o) {
if (o instanceof Foo && o instanceof Bar) {
doSomething((Problematic cast) o);
}
}
}
Buena idea. Lo usé de una manera ligeramente diferente. Prefiero el FooBarAdapter para llegar a los objetos con los 2 tipos diferentes. El == se puede usar para verificar si es el mismo objeto (no es obligatorio). De esta manera, es una verificación de tipo de tiempo de compilación. –
Combiné este patrón delegado anónimo/named method method classes para "lanzar" un objeto que conozco para extender/implementar un conjunto de clases e interfaces para los requisitos vinculados. Ver la respuesta de Jon: http://stackoverflow.com/a/9514406/910718 –
Y esta parece ser la limitación del lenguaje Java porque en Scala corriendo en la misma JVM, esto es fácil como o.asInstanceOf [Foo con barra] –