Sto cercando di specificare che una classe generica deve essere una matrice, o meglio ancora una matrice primitiva. Finora questo è quello che ho ottenuto lavorando:Java generici e tipi di array, non è quello che stai pensando (ad esempio array di tipi generici)
interface Foo<T> {
void process(T data);
}
public class Moo implements Foo<int[]> {
void process(int[] data) {
// do stuff here
}
}
Questo è tutto il codice Java perfettamente valido e funziona perché gli array primitivi estendono oggetto. Si noti che questa domanda è completamente diversa da tutte le altre domande generiche sugli array Java che continuo a trovare. In quella situazione le persone vogliono creare un array con un tipo generico.
Il problema è che il tipo T può essere qualsiasi cosa che estende Object. Quello che voglio è quello di fare qualcosa di simile:
<T extends ONLY ARRAYS>
o
<T extends ONLY PRIMITIVE ARRAYS>.
è possibile?
MODIFICA: l'obiettivo finale sarebbe quello di aggiungere un controllo del tempo di compilazione sul tipo di array passato. Al momento qualsiasi oggetto vecchio può essere passato e verrà compilato correttamente. L'errore verrà rilevato solo in fase di esecuzione quando viene lanciata un'eccezione di classe cast. In realtà questo è il punto di forza di Generics in Java, per aggiungere un controllo più accurato del tipo a tempo di compilazione.
Perché mai hai bisogno di fare questo? – Jeffrey
Sono d'accordo sul fatto che "dovrebbe" essere possibile. Il mio istinto mi dice che non esiste nessun altro supertipo delle classi di primitive di Object. (C'è un isArray() sulla Classe Class) – esej
Una singola interfaccia per l'elaborazione di immagini con dati di tipi primitivi diversi. L'alternativa è avere un'interfaccia diversa per ogni tipo, che è un peggior kludge. Esempio, Foo_S32, Foo_U8, Foo_F32, ... ecc. –