powiedzmy zadeklarować zmienną:Skąd znasz typ zmiennej w java?
String a = "test";
I chcę wiedzieć, jakiego typu jest to, to wyjście powinno być java.lang.String
jaki sposób mogę to zrobić?
powiedzmy zadeklarować zmienną:Skąd znasz typ zmiennej w java?
String a = "test";
I chcę wiedzieć, jakiego typu jest to, to wyjście powinno być java.lang.String
jaki sposób mogę to zrobić?
a.getClass().getName()
To da rodzaj wartości. niekoniecznie typ zmiennej. –
Po prostu pomyślałem, że to, czego OP naprawdę szukał, ponieważ deklaracja 'a' jest dość oczywista w czasie kompilacji – Martin
To by działało, gdyby typy nie były prymitywami ... Jeśli typ to int, jak się dowiedzieć Typ? –
Jeśli chcesz nazwę, użyj metody Martina. Jeśli chcesz wiedzieć, czy to wystąpienie pewnej klasy:
boolean b = a instanceof String
zgadzam się z tym, co Joachim Sauer powiedział, nie jest możliwe, aby wiedzieć (! Typ zmiennej nie typ wartości), chyba że zmienna jest atrybut klasy (i będziesz musiał pobrać pola klasy, uzyskaj właściwe pole po nazwie ...)
Właściwie dla mnie jest całkowicie niemożliwe, aby jakakolwiek metoda a.xxx().yyy()
dała ci właściwą odpowiedź, ponieważ odpowiedź byłaby inna ten sam obiekt, zgodnie z kontekstem, w którym nazywasz tę metodę ...
Jak powiedział teehoo, jeśli wiesz, że podczas kompilowania zdefiniowanej listy typów do testowania możesz użyć instanceof, ale otrzymasz również podklasy zwracające true ...
Jednym z możliwych rozwiązań byłoby zainspirowanie się z wdrożenia java.lang.reflect.Field
i stwórz własną klasę Field
, a następnie zadeklaruj wszystkie zmienne lokalne jako niestandardową implementację Field
... ale lepiej znajdź inne rozwiązanie, naprawdę zastanawiam się, dlaczego potrzebujesz typu zmiennej, a nie tylko typ wartości?
Nauczyłem się z wyszukiwarki (mój angielski jest bardzo zły, więc kod ...) Jak uzyskać typ zmiennej? Up to:
String str = "test";
String type = str.getClass().getName();
value: type = java.lang.String
ta metoda:
str.getClass().getSimpleName();
value:String
teraz przykład:
Object o = 1;
o.getClass().getSimpleName();
value:Integer
chciałbym rozwinąć odpowiedź Marcina tam ...
Jego rozwiązanie jest raczej fajnie, ale można go zmodyfikować tak, aby każdy "typ zmiennej" mógł być wydrukowany w ten sposób. (Tak naprawdę jest Typ wartości, more on the topic). Nie tak mocno podkręcona, jak wskazująca na możliwość.
Jego rozwiązanie było:
a.getClass().getName()
Jeśli chcesz go do pracy z niczego można to zrobić:
((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()
W tym przypadku, po prostu prymitywny być owinięta w owijkę. W takim przypadku otrzymasz obiekt obiektu pierwotnego.
ja stosować go tak:
private static String nameOf(Object o) {
return o.getClass().getSimpleName();
}
Korzystanie Generics:
public static <T> String nameOf(T o) {
return o.getClass().getSimpleName();
}
Zastosowanie operatora przeciążenia funkcji java
class Test {
void printType(String x) {
System.out.print("String");
}
void printType(int x) {
System.out.print("Int");
}
// same goes on with boolean,double,float,object ...
}
Java nie ma pojęcia przeciążenia operatora, jest to przeciążanie metody – nicoschl
Myślę, że mamy wiele rozwiązań tutaj:
Dlaczego? W Javie każda klasa jest dziedziczona z samej klasy Object. Więc jeśli masz zmienną i chcesz wiedzieć, jaki to będzie działać.
lub
lub
isPrimitive()
public static void main(String[] args) {
ClassDemo classOne = new ClassDemo();
Class classOneClass = classOne();
int i = 5;
Class iClass = int.class;
// checking for primitive type
boolean retval1 = classOneClass.isPrimitive();
System.out.println("classOneClass is primitive type? = " + retval1);
// checking for primitive type?
boolean retval2 = iClass.isPrimitive();
System.out.println("iClass is primitive type? = " + retval2);
}
To da nam:
dowiedzieć się więcej tutaj: How to determine the primitive type of a primitive variable?
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
http://docs.oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html
naprawdę jesteś zainteresowany typu * zmiennej *? Czy zależy ci na * rodzaju wartości *? Ponieważ rodzaju zmiennej nie można łatwo uzyskać (w rzeczywistości nie jest to możliwe dla zmiennych lokalnych i wymaga refleksji dla pól). –
@Joachim, jaka jest dokładnie różnica między "typem zmiennej" a "typem wartości"? –
@Paul: Rozważ "Object o =" o ";' - typem zmiennej jest Object, typem tej wartości jest String. –