Скажем, объявляю переменную:
String a = "test";
И я хочу знать, какой тип это, т.е. выход должен быть java.lang.String
Как это сделать?
Скажем, объявляю переменную:
String a = "test";
И я хочу знать, какой тип это, т.е. выход должен быть java.lang.String
Как это сделать?
a.getClass().getName()
Если вы хотите использовать это имя, используйте метод Martin. Если вы хотите узнать, является ли это экземпляром определенного класса:
boolean b = a instanceof String
Я узнал из поисковой системы (мой английский очень плохой, так что код...) Как получить тип переменной? Вверх:
String str = "test";
String type = str.getClass().getName();
value: type = java.lang.String
этот метод:
str.getClass().getSimpleName();
value:String
теперь пример:
Object o = 1;
o.getClass().getSimpleName();
value:Integer
Я хотел бы расширить ответ мартина там...
Его решение довольно хорошее, но его можно настроить так, чтобы можно было напечатать любой "тип переменной" (на самом деле это тип значения, подробнее по теме). Тем не менее, "твик" может быть сильным словом для этого. В любом случае, это может быть полезно.
Решение Martins:
a.getClass().getName()
Однако, если вы хотите, чтобы он работал с чем-либо, вы можете сделать это:
((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()
В этом случае примитив будет просто завернут в оболочку. В этом случае вы получите Объект примитива.
Я сам использовал это так:
private static String nameOf(Object o) {
return o.getClass().getSimpleName();
}
Использование обобщений:
public static <T> String nameOf(T o) {
return o.getClass().getSimpleName();
}
Использовать функцию перегрузки оператора 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 ...
}
Я согласен с тем, что сказал Йоахим Зауэр, невозможно узнать (тип переменной! не тип значения!), если ваша переменная не является атрибутом класса (и вам нужно будет получить поля класса, получить правильное поле по имени...)
На самом деле для меня совершенно невозможно, что любой метод a.xxx().yyy()
дает вам правильный ответ, поскольку ответ будет отличаться от одного и того же объекта в соответствии с контекстом, в котором вы называете этот метод...
Как сказал teehoo, если вы знаете при компиляции определенного списка типов для тестирования, вы можете использовать instanceof, но вы также получите подклассы, возвращающие true...
Одним из возможных решений было бы также вдохновить себя на реализацию java.lang.reflect.Field
и создать свой собственный класс Field
, а затем объявить все ваши локальные переменные как эту обычную реализацию Field
... но вам лучше найти другое решение, мне действительно интересно, зачем вам нужен тип переменной, а не только тип значения?
Я думаю, что у нас есть несколько решений здесь:
Зачем? В Java каждый класс наследуется от самого класса Object. Так что если у вас есть переменная, и вы хотели бы знать ее тип. Ты можешь использовать
или же
или же
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);
}
Это даст нам:
Узнайте больше здесь: Как определить примитивный тип примитивной переменной?
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