Przecież getClass
wyświetli np. coś takiego: class [Ljava.lang.String;
, czyli poznamy jedynie typ zmiennej (który i tak znamy), a nie dowiemy się, jakiej klasy tablica jest obiektem. :|
Nie, dowiesz się też, jaki jest typ tablicy, jest to:
[Ljava.lang.String
A to, że jego nazwa jest tworzona na bazie typu elementów tablicy, nie oznacza, że możesz zignorować [L w nazwie typu i stwierdzić, że getClass() zwraca tylko typ elementów tablicy. Jest to wewnętrzna nazwa (taki alias powiedzmy), znaczy tyle, co String[] (co też jako całość jest nazwą typu).
Tak na logikę - skoro tablice są obiektami, a każdy obiekt musi mieć typ, to gdzieś w hierarchii powinna istnieć klasa definiująca bazowy typ tablicowy.
Nie, nie powinna - jak pisałem wyżej, ogólny, nieabstrakcyjny typ tablicowy nie ma sensu (jeśli chodzi o języki statycznie typowane przynajmniej). W takim C# na przykład między Object a typami tablicowymi istnieje co prawda jeszcze klasa abstrakcyjna Array, ale to nadal nic nie zmienia, jak sama nazwa wskazuje jest to dodatkowa klasa nadrzędna, a nie klasa, której instancjami są tablice (zawiera ona głównie gettery i settery wspólnych właściwości tablic i mnóstwo metod statycznych - stanowi de facto odpowiednik klasy java.util.Arrays), same tablice mają własne typy.
Java: http://ideone.com/Y5v2oZ
C#: http://ideone.com/4HM2NH
Jak widać różnica kosmetyczna.
Albo wiele takich klas.
Raczej nieskończenie wiele ;) Ile typów danych, które są przechowywane w tablicach tyle musiałoby być klas tablicowych (a, że typów danych przechowywanych w tablicach może być nieskończenie wiele to sam widzisz ile to ma sensu).
Albo nie ma takiej klasy, a tablice to jakaś magia kompilatora, który zamienia ich deklaracje na plik XML i ExceptionFactory, ale to też by należało opisać.
Coś w tym stylu, nie ma (bo nie może być) predefiniowanych typów tablic, są one tworzone dynamicznie na podstawie deklaracji programisty. Jak to się technicznie odbywa - nie wiem, jest to mało istotne dla zrozumienia tematu (choć niewątpliwie ciekawe, kiedyś o tym poczytam).
Proste pytanie, a Wy zamiast udzielić prostej odpowiedzi, albo wrzucacie bezsensowne kawałki kodu, albo czepiacie się autora, że w ogóle śmiał spytać o coś, co dla Was jest oczywiste - chociaż chyba jednak nie jest.
Jasne, takie trywialne to to nie jest, natomiast postawa autora tematu skutecznie zniechęca do tłumaczenia czegokolwiek - stąd to zbywanie na początku (przynajmniej jeśli o mnie chodzi).
(Jeśli coś źle napisałem to proszę o sprostowanie, nie jestem Javowcem).