2013-08-16 27 views
11

W języku int, float i itp. Są to typy pierwotne. Klasy wrapperów są używane na wypadek, gdybyśmy potrzebowali go używać z lekami generycznymi. Ale jeszcze następujące oświadczenie pracuje w Javie,Co oznacza klasa int.class

Class<Integer> intClass=int.class 

Jak możemy nazwać int.class choć jest to prymitywny typ?

+0

Oto odpowiedź .. http://stackoverflow.com/questions/1072066/about-the-class-property-field http://stackoverflow.com/questions/10076629/ how-does-a-class-property-work –

Odpowiedz

6

Prymitywny staje obiektu

Dla prymitywów, istnieją obiekty Dostępny jako stałe nazwie TYP w odpowiednich klasach Owijarki - tj int.class zmienia się na java.lang.Integer.TYPE . W przypadku innych typów kompilator tworzy prywatną zmienną składową klasy kompilowanej w celu przechowywania obiektu klasy i generuje kod do zainicjowania tego elementu przy użyciu Class.forName().

Znaleziono trochę discussion

i piękny discussion here a przykładem objęte również w ten link.

Kilka słów od tam:

jak może być prymitywny klasy? Mylmy trochę więcej rzeczy. Możemy uzyskać dostęp do obiektu klasy reprezentujące określoną klasę przez kodowanie, powiedzieć:

Equation.class // returns the Equation Class object 

Ale możemy też powiedzieć:

int.class 

uzyskać obiektu klasy, której nazwa brzmi „int” . Uwaga: nie wysłaliśmy metody getClass() do obiektu; użyliśmy słowa zarezerwowanego dla wbudowanego typu pierwotnego (int) i używając notacji kropkowej, uzyskaliśmy dostęp do jego klasy "pole". A to zwraca obiekt klasy!

4

int.class jest tego samego typu cozgodnie ze specyfikacją.

Od Docs:

prymitywne typy Java (boolean, byte, char, short, int, long, pływak i dwuosobowe) oraz void kluczowe są również reprezentowane klasy obiektów.

Od JLS 15.8.2:

15.8.2. Literały klasy

Klasa dosłownym jest ekspresja składa się z nazwy, klasy interfejsu, tablicy lub pierwotnego typu lub pseudo typu pustych, a następnie przez ". i klasa tokena.

Typ C.class, gdzie C to nazwa typu tablicy, interfejsu lub , to Class<C>.

Typ p.class, gdzie p jest nazwą prymitywnego typu jest Class<B>, gdzie B jest typem wyrażenia typu p po konwersji boksu.

Typ void.class to Class<Void>.

Jest to błąd kompilacji, jeśli nazwany typ to typ zmiennej lub rodzaj parametryzowane lub tablica, której elementem jest typ zmiennej rodzaj lub typ parametryzowane.

Jest to błąd podczas kompilacji, jeśli podany typ nie oznacza typu , który jest dostępny i znajduje się w zasięgu w miejscu, w którym pojawia się literał klasy klasy .

Literał klasy odnosi się do obiektu klasy dla określonego typu (lub dla pustej przestrzeni) zdefiniowanego przez definiujący moduł ładujący klasy klasy bieżącej instancji.

+1

Mówiąc "* jest *" klasa '" jest błędne i mylące. * Typ * klasy 'int.class' to' Klasa ', ale jest to obiekt zupełnie inny niż instancja' Class ', która jest" Integer.class ", i reprezentuje typ prymitywnej' int' zamiast Obiekty "Integer". – user2357112

2

Literał klasy jest wyrażeniem składającym się z nazwy klasy, interfejsu, tablicy lub typu pierwotnego lub pustki typu pseudo-typu, po której następuje znak "." i klasa tokena.

  1. Wyliczenie jest rodzajem klasy, a adnotacja jest rodzajem interfejsu.
  2. Każda tablica należy również do klasy, która jest odzwierciedlana jako obiekt klasy, który jest współużytkowany przez 3. wszystkie tablice o tym samym typie elementu i liczbie wymiarów. są również
  3. prymitywne typy Java (boolean, byte, char, short, int, long, float, i podwójne) i
  4. pustkę kluczowego

reprezentowane jako obiekty klasy.

Tak System.out.println(int.class); wydrukuje int, natomiast System.out.println(Integer.class); wydrukuje class java.lang.Integer.