Estoy tratando de especificar que una clase genérica tiene que ser una matriz, o mejor aún una matriz primitiva. Hasta el momento esto es lo que tengo trabajo:Java tipos genéricos y de matriz, no es lo que está pensando (por ejemplo, matrices de tipos genéricos)
interface Foo<T> {
void process(T data);
}
public class Moo implements Foo<int[]> {
void process(int[] data) {
// do stuff here
}
}
Este es todo el código Java perfectamente válido y funciona porque las matrices primitivas objeto extendido. Tenga en cuenta que esta pregunta es completamente diferente de todas las demás preguntas genéricas de matriz de Java que sigo encontrando. En esa situación, la gente quiere crear una matriz de un tipo genérico.
El problema es que el tipo T puede ser cualquier objeto que extienda Object. Lo que quiero es hacer algo como:
<T extends ONLY ARRAYS>
o
<T extends ONLY PRIMITIVE ARRAYS>.
¿Es posible?
EDITAR: El objetivo final sería agregar una verificación de tiempo de compilación en el tipo de matriz que se está transfiriendo. En este momento se puede pasar cualquier objeto antiguo y se compilará muy bien. El error solo se encontrará en el tiempo de ejecución cuando se lanza una excepción de lanzamiento de clase. De hecho, este es el objetivo de Generics en Java, para agregar una comprobación de tipo de tiempo de compilación más fuerte.
¿Por qué necesitaría para hacer esto? – Jeffrey
Estoy de acuerdo en que "debería" ser posible. Mi instinto me dice que no hay otro supertipo de las matrices de primitiva de Object. (Hay un isArray() en la Clase Class) – esej
Una única interfaz para procesar imágenes con datos de diferentes tipos primitivos. La alternativa es tener una interfaz diferente para cada tipo, que es una peor kludge. Ejemplo, Foo_S32, Foo_U8, Foo_F32, ... etc. –