Как проверить тип переменной в Java?
Как я могу проверить, чтобы моя переменная была int, array, double и т.д. Изменить: Например, как я могу проверить, что переменная является массивом? Есть ли какая-нибудь функция для этого?
Strawberry 22 окт. 2010, в 06:55
Поделиться
Посмотрите на Reflection API .
mschonaker 22 окт. 2010, в 05:17
Поделиться:
11 ответов
Java — это статически типизированный язык, поэтому компилятор делает большую часть этой проверки для вас. Когда вы объявляете переменную определенным типом, компилятор будет гарантировать, что это только когда-либо назначенные значения этого типа (или значения, которые являются подтипами этого типа).
Приведенные вами примеры (int, array, double) — это все примитивы, а подтипов их нет. Таким образом, если вы объявляете переменную как int :
int x;
Вы можете быть уверены, что он будет удерживать только int значения.
Если вы указали переменную как List , однако, возможно, что переменная будет содержать подтипы List . К ним относятся: ArrayList , LinkedList и т.д.
Если у вас есть переменная List , и вам нужно знать, была ли она ArrayList , вы могли бы сделать следующее:
List y; . if (y instanceof ArrayList)
Однако, если вы считаете, что вам нужно это сделать, вы можете подумать о своем подходе. В большинстве случаев, если вы будете следовать объектно-ориентированным принципам, вам не нужно будет этого делать. Конечно, есть исключения для каждого правила.
pkaeding 22 окт. 2010, в 06:15
Поделиться
Оператор instanceof определяет только тип данных объекта, на который ссылается переменная. Он не определяет тип данных фактического VARIABLE, как первоначально было запрошено.
GrantRobertson 25 июль 2016, в 04:16
На самом деле довольно легко свернуть собственный тестер, злоупотребляя способностью перегрузки 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 );
Mvcoile 23 май 2013, в 15:35
Поделиться
Не хороший метод ИМО. Что произойдет, если я передам какой-нибудь произвольный тип, который не определен в вашем классе Typetester — в данном случае, например, String?
Tash Pemhiwa 07 окт. 2013, в 14:16
@TashPemhiwa затем добавьте String и Object к выбору. Креативность и решение проблем — лучшие активы программистов.
Kato 01 окт. 2014, в 18:22
Тем не менее, это может иметь дело только с фиксированным набором предопределенных классов (что противоречит цели объектной ориентации / полиморфизма) и даст вам только что-то вроде «неизвестного класса» для объектов любого другого класса.
Algoman 05 нояб. 2015, в 10:24
Тем не менее мне нравится воображение.
Cristian Olaru 04 май 2016, в 00:41
Выбор какой подписи происходит во время компиляции, а не во время выполнения. Так что эта техника не скажет вам ничего, чего вы еще не знали во время компиляции. docs.oracle.com/javase/specs/jls/se7/html/.
jmh 30 июнь 2017, в 20:31
Показать ещё 3 комментария
a.getClass().getName() — даст вам тип данных фактического объекта, на который ссылается a , но не тип данных, который переменная a была первоначально объявлена как или впоследствии приведена к ней.
boolean b = a instanceof String — сообщит вам, является ли фактический объект, на который ссылается a экземпляром определенного класса. Опять же, тип данных, который переменная a была первоначально объявлена как или впоследствии приведена, не имеет никакого отношения к результату оператора instanceof.
Это может случиться Я пытаюсь разобрать String в int, и я хотел бы знать, если мой Integer.parseInt(s.substring(a, b)) выбрасывает int или мусор, прежде чем я Integer.parseInt(s.substring(a, b)) итоги.
Как посмотреть тип переменной java?
Это относится не к строгости, а к статичности. Теоретически можно через рефлексию, но она медленная и её использование лишает вас всех преимуществ статической типизации. Её применения стоит избегать, если вы не занимаетесь разработкой фреймворка или инструментальных средств.
27 мая 2019 в 17:45
Да и приведения в java-коде — это маркер архитектурных проблем, их использование тоже стоит сводить к минимуму.
27 мая 2019 в 17:47
если вы привели экземпляр класса к суперклассу, то это возможно всегда и никаких проверок не требуется. мало того, на этом стоит все ооп. если же вы пытаетесь узнать, какой именно экземпляр класса лежит в конкретной переменной,то у вас с вероятностью 99 процентов проблемы с архитектурой, потому как для того объект и приводится к родителю, чтобы потом использовать множество различных объектов одинаковым способом — вызывая методы у переменной типа родителя. разумеется,есть метод getClass(),который получает реальный класс объекта в переменной, после чего можно узнать имя-getName()
Получение типа данных переменной в Java
Как проверить тип переменной в Java? Например, дана переменная i , и после вычислений и приведения типов я хочу узнать, к какому типу данных эта переменная в итоге была приведена.
Отслеживать
задан 1 мая 2015 в 21:43
1 2 2 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
При объявлении вы задаёте тип переменной и этот тип остаётся неизменным в течение выполнения программы.
int x = 10;
Однако вы можете сделать так:
double y = x;
То есть присвоить переменной y значение переменной x с приведением типа из int в тип double.
Но переменная x как была типа int, так и остаётся.
Как узнать тип переменной java
В Java можно узнать тип переменной, используя оператор instanceof . Он позволяет проверить, является ли объект экземпляром определенного класса.
public class Main public static void main(String[] args) String str = "Hello, Hexlet!"; Integer integer = 123; System.out.println(str instanceof String); // => true System.out.println(integer instanceof Integer); // => true System.out.println(str instanceof Object); // => true System.out.println(integer instanceof Object); // => true > >
В этом примере мы объявляем переменные str и integer , типы которых String и Integer соответственно. Затем мы используем оператор instanceof для проверки, являются ли эти переменные экземплярами классов String , Integer или Object .
Как видно из примера, переменная str является экземпляром класса String , а переменная integer — экземпляром класса Integer . Кроме того, обе переменные также являются экземплярами класса Object , так как все классы в Java наследуются от этого класса.
