2013-12-09 30 views
6

Na ryzyko zadaje pytanie, które już zostały poproszone alerodzaju typów w Javie

istnieje odpowiednik w języku Java dla typu Type dostępnych w C#?

Co chcę zrobić jest wypełnienie tablicę z elementów, które odzwierciedlają kilka prymitywnych typów, takich jak int, bajt itp

w C# byłoby następujący kod:

Type[] types = new Type[] { typeof(int), typeof(byte), typeof(short) }; 
+1

wisiorek = odpowiednik; podobny konstrukt dostępny w Javie, ponieważ jest dostępny w języku C#. –

+0

To nie jest odpowiedź, ale skąd bierzesz tę definicję "wisiorka"? Nigdy nie słyszałem tego użycia. Możesz wyłączyć czytelników za pomocą ezoterycznego słowa, gdy istnieją alternatywne rozwiązania. Tylko myśl. – loneboat

+0

cóż ... Nie jestem native speakerem języka angielskiego. W języku niemieckim, który moim językiem ojczystym słowo "wisiorek" jest dość powszechne. Szczerze mówiąc po prostu myliłem się, patrząc na mój słownik angielski. Zastąpię go czymś bardziej powszechnym :) –

Odpowiedz

10

Tak, są one dostępne na opakowaniach TYPE:

Class[] types = new Class[] {Integer.TYPE, Byte.TYPE, ...}; 

Można również użyć int.class składni, który nie był dostępny w poprzednich wersjach języka:

Class[] types = new Class[] {int.class, byte.class, ...}; // Lowercase is important 
+2

+1 za wspaniałą odpowiedź. – Brian

+0

Pracowałem jak zaklęcie - dziękuję bardzo :) –

3

Mówisz o:

Class[] aClass = {Integer.class, Short.class, Byte.class}; 

jednak, aby podkreślić różnicę Integer.TYPE i Integer.class: Integer.TYPE jest w rzeczywistości typu Class<Integer> i: Integer.TYPE jest odpowiednikiem int.class

System.out.println(Integer.class == Integer.TYPE); // false 
System.out.println(Integer.TYPE == int.class); // true 
+1

W przeciwieństwie do C#, pierwotny typ numeryczny w Javie nie jest równoważny z typem ramki/pudełkowym. 'Integer.class' nie jest równoważne' int.class' (lub 'Integer.TYPE'), chociaż' typeof (int) 'jest równoważne' typeof (System.Int32) '. Tak więc twoja odpowiedź może spowodować pewne zamieszanie w oparciu o typy z przykładu OP. –

+0

@MikeStrobel, wspominałem o tym w odpowiedzi. Właściwie spóźniłem się na wzmiankę o "int.class" i takie, a kiedy znalazłem już napisany plakat, pominąłem dyskusję, aby uniknąć bałaganu. Jednak zaktualizowałeś odpowiedź, aby podkreślić swoją opinię :) – Sage

+0

Dziękuję bardzo - twoja pomoc jest bardzo doceniana. –