Как проверить тип переменной в Java?

Как я могу проверить, чтобы моя переменная была int, array, double и т. Д. …?

Изменить: Например, как я могу проверить, что переменная является массивом? Есть ли какая-то функция для этого?

Java – это статически типизированный язык, поэтому компилятор выполняет большую часть этой проверки для вас. Когда вы объявляете переменную определенным типом, компилятор будет гарантировать, что это только когда-либо назначенные значения этого типа (или значения, которые являются подтипами этого типа).

Приведенные вами примеры (int, array, double) – все примитивы, а подтипов их нет. Таким образом, если вы объявляете переменную как int :

 int x; 

Вы можете быть уверены, что он будет удерживать только значения int .

Однако, если вы указали переменную как List , возможно, что переменная будет содержать подтипы List . К примерам относятся ArrayList , LinkedList и т. Д.

Если у вас есть переменная List и вам нужно знать, был ли это ArrayList , вы могли бы сделать следующее:

 List y; ... if (y instanceof ArrayList) { ...its and ArrayList... } 

Однако, если вы считаете, что вам нужно это сделать, вы можете подумать о своем подходе. В большинстве случаев, если вы будете следовать объектно-ориентированным принципам, вам не нужно будет этого делать. Конечно, есть исключения для каждого правила.

На самом деле довольно легко свернуть собственный тестер, злоупотребляя способностью перегрузки метода Java. Хотя мне все еще интересно, есть ли в sdk официальный метод.

Пример:

 class Typetester { void printType(byte x) { System.out.println(x + " is an byte"); } void printType(int x) { System.out.println(x + " is an int"); } void printType(float x) { System.out.println(x + " is an float"); } void printType(double x) { System.out.println(x + " is an double"); } void printType(char x) { System.out.println(x + " is an char"); } } 

тогда:

 Typetester t = new Typetester(); t.printType( yourVariable ); 

a.getClass().getName() – даст вам тип данных фактического объекта, на который ссылается a , но не тип данных, из которого первоначально была объявлена ​​переменная a или впоследствии выбрана.

boolean b = a instanceof String – даст вам, действительно ли объект, на который ссылается a является экземпляром определенного classа. Опять же, тип данных, который переменная a была первоначально объявлена ​​или впоследствии отброшена, не имеет отношения к результату оператора instanceof.

Я взял эту информацию из: Откуда вы знаете переменный тип в java?

Это может случиться. Я пытаюсь разобрать String в int, и я хотел бы знать, если мой Integer.parseInt(s.substring(a, b)) int или мусор, прежде чем попытаться подвести итог.

Кстати, это называется reflectionм. Вот еще информация по теме: http://docs.oracle.com/javase/tutorial/reflect/

Вы можете работать с Integer вместо int, Double вместо double и т. Д. (Такие classы существуют для всех примитивных типов). Затем вы можете использовать оператор instanceof, например if(var instanceof Integer){...}

Первая часть вашего вопроса бессмысленна. Нет никаких обстоятельств, когда вы не знаете тип примитивной переменной во время компиляции.

Повторите вторую часть, единственное обстоятельство, что вы еще не знаете, является ли переменная массивом, является ли это объектом. В этом случае object.getClass().isArray() скажет вам.

Я сделал это, используя: if(x.getClass() == MyClass.class){...}

Ну, я думаю, что проверка типа переменной может быть выполнена таким образом.

 public  void checkType(T object) { if (object instanceof Integer) System.out.println("Integer "); else if(object instanceof Double) System.out.println("Double "); else if(object instanceof Float) System.out.println("Float : "); else if(object instanceof List) System.out.println("List! "); else if(object instanceof Set) System.out.println("Set! "); } 

Таким образом, вам не нужно иметь несколько перегруженных методов. Я считаю хорошей практикой использовать коллекции по массивам из-за дополнительных преимуществ. Сказав это, я не знаю, как проверить тип массива. Может быть, кто-то может улучшить это решение. Надеюсь это поможет!

PS Да, я знаю, что это тоже не проверяет примитивы.

Я не был доволен ни одним из этих ответов, и тот, кто прав, не имеет объяснений и отрицательных голосов, поэтому я искал, нашел кое-что и отредактировал его, чтобы его было легко понять. Играйте с ним, не так прямо, как хотелось бы.

 //move your variable into an Object type Object obj=whatYouAreChecking; System.out.println(obj); // moving the class type into a Class variable Class cls=obj.getClass(); System.out.println(cls); // convert that Class Variable to a neat String String answer = cls.getSimpleName(); System.out.println(answer); 

Вот способ:

 public static void checkClass (Object obj) { Class cls = obj.getClass(); System.out.println("The type of the object is: " + cls.getSimpleName()); } 

Просто используйте:

 .getClass().getSimpleName(); 

Пример:

 StringBuilder randSB = new StringBuilder("just a String"); System.out.println(randSB.getClass().getSimpleName()); 

Вывод:

 StringBuilder 

открытый class Demo1 {

 Object printType(Object o) { return o; } public static void main(String[] args) { Demo1 d=new Demo1(); Object o1=d.printType('C'); System.out.println(o1.getClass().getSimpleName()); } 

}

  • Как отключить SSLv3 в android для HttpsUrlConnection?
  • Как добавить два java.lang.Numbers?
  • Как получить текущий момент в формате ISO 8601 с датой, часом и минутой?
  • Calendar.getInstance (TimeZone.getTimeZone («UTC»)) не возвращает время UTC
  • Получить сгенерированный идентификатор после вставки
  • Как найти программные приложения, запущенные в настоящее время, в Android?
  • Создайте библиотеку Jar для Android для распространения
  • Как передать объект Bitmap из одной активности в другую
  • ISO 8601 Объект String to Date / Time в Android
  • Как запустить программу Java из командной строки в Windows?
  • Невозможно получить ответ response.body.toString () OkHttp для возврата строки
  • Давайте будем гением компьютера.