Próbuję określić, że klasa generyczna musi być tablicą, a jeszcze lepiej prymitywną tablicą. Do tej pory jest to, co mam pracy:Typy generyczne i tablice Java, nie to, co myślisz (na przykład tablice generyczne)
interface Foo<T> {
void process(T data);
}
public class Moo implements Foo<int[]> {
void process(int[] data) {
// do stuff here
}
}
To wszystko jest całkowicie poprawny kod Java i działa, ponieważ prymitywne tablice przedłużyć Object. Zauważ, że to pytanie jest zupełnie inne niż ze wszystkich innych pytań generycznych tablicy Javy, które ciągle znajduję. W tej sytuacji ludzie chcą stworzyć tablicę z rodzaju ogólnego.
Problem polega na tym, że typem T może być wszystko, co rozszerza obiekt. Co chcę zrobić coś takiego:
<T extends ONLY ARRAYS>
lub
<T extends ONLY PRIMITIVE ARRAYS>.
Czy to możliwe?
EDYCJA: Ostatecznym celem byłoby dodanie sprawdzenia czasu kompilacji dla przekazywanego typu tablicy. W tej chwili każdy stary obiekt może zostać przekazany, a skompilowany. Błąd zostanie wykryty tylko w środowisku wykonawczym, gdy zgłoszony zostanie wyjątek rzutu klasowego. W rzeczywistości jest to cały punkt Generics w Javie, aby dodać silniejsze sprawdzanie czasu kompilacji.
dlaczego trzeba to zrobić? – Jeffrey
Zgadzam się, że "powinno" być możliwe. Moje przeczucie mówi mi, że nie ma innego rodzaju nadstrukturalnego z klas prymitywnych niż Obiekt. (Istnieje klasa isArray() w klasie Class) – esej
Pojedynczy interfejs do przetwarzania obrazów z danymi różnych typów pierwotnych. Alternatywą jest posiadanie innego interfejsu dla każdego typu, który jest gorszym kludge. Przykład: Foo_S32, Foo_U8, Foo_F32, ... itd. –