Inconvertible types; cannot cast 'int' to 'int'
не пойму почему не работает instanceof, мне нужно сделать проверку на тип переменной, выводит Inconvertible types; cannot cast 'int' to 'int'
try {
int[] numbers;
numbers = new int [3];
System.out.println("Введите числа");
for (int i = 0; i < 3; i++) {
numbers[i]=scanner.nextInt();
if(!(numbers[i] instanceof int)){
throw new Exception1("Ошибка: Не подходящий тип данных",numbers[i]);
}
}
Ответы (3 шт):
Оператор instanceof не работает с примитивными типами, только со ссылочными. Если ваша задача состоит в том, чтобы проверить ввод пользователя, то лучше воспользуйтесь более распространённым решением:
Scanner scanner = new Scanner(System.in);
int[] numbers;
numbers = new int[3];
System.out.println("Введите числа");
for (int i = 0; i < 3; i++) {
if (scanner.hasNextInt()) {
numbers[i] = scanner.nextInt();
} else {
scanner.next();
//Добавьте свой код, если введён не int
}
}
for (int i : numbers) {
System.out.println(i);
}
Если вдруг почему-то надо динамически проверить примитивный тип элемента массива, то можно использовать Class:
int[] numbers = new int[] { 1, 2, 3};
boolean isInstance = numbers.getClass().getComponentType() == Integer.TYPE;
System.out.println(isInstance);
Но, скорее всего, здесь вообще ничего проверять в массиве не нужно. Проверки нужны, если массив был бы, например, Object[], а по типу элемента необходимо делать те или иные действия. Если значение попало в массив int[], то оно уже заведомо int.
Самым лучшим аналогом будет являться метод isInstance():
if (!Integer.class.isInstance(numbers[i]))
throw new Exception1("Ошибка: Не подходящий тип данных",numbers[i]);