Ошибка приведения типов java

Это плохой подход… Ваш метод принимает сам не знает что. Методы instanceof , toString — очень медленные. Будете злоупотреблять ими — получите огромное падение производительности. Подумайте, какие типы может принимать ваш метод. Насколько я понял это Boolean и String. Отлично, так почему бы вам не перегрузить метод для этих типов?

public static Boolean convertToBoolean (Boolean value) {
    return value == null ? false : value;
}

public static Boolean convertToBoolean (String value) {
    if (value == null || value.isEmpty()) return false;
    for (String arrayValue : TrueArray) {
        if (value.equalsIgnoreCase(arrayValue)) return true;
    }
    return false;
}

Для сведения… value.equalsIgnoreCase(arrayValue) — это выражение при значении null в переменной value дает исключение, но если null будет в аргументах, т.е. в том случае в переменной arrayValue, то все нормально отработает. Следовательно, если ваш массив состоит из нескольких элементов и в него не могут попасть null, то проверку на null можно и не делать, просто изменить выражение в условии так arrayValue.equalsIgnoreCase(value).

Обратите внимание, что TrueArray — переменная, хранящая ссылку на массив, а переменные принято именовать с маленьких букв. Может Вам покажется это мелочью, но за это вообще-то отбивают руки и правильно делают…

ClassCastException in Java occurs when we try to convert the data type of entry into another. This is related to the type conversion feature and data type conversion is successful only where a class extends a parent class and the child class is cast to its parent class. 

Here we can consider parent class as vehicle and child class may be car, bike, cycle etc., Parent class as shape and child class may be 2d shapes or 3d shapes, etc.

Two different kinds of constructors available for ClassCastException.

  1. ClassCastException(): It is used to create an instance of the ClassCastException class.
  2. ClassCastException(String s): It is used to create an instance of the ClassCastException class, by accepting the specified string as a message.

Let us see in details

Java

import java.math.BigDecimal;

public class ClassCastExceptionExample {

    public static void main(String[] args)

    {

        Object sampleObject = new BigDecimal(10000000.45);

        System.out.println(sampleObject);

    }

}

Output

10000000.4499999992549419403076171875

If we try to print this value by casting to different data type like String or Integer etc., we will be getting ClassCastException. 

Java

import java.math.BigDecimal;

public class Main {

    public static void main(String[] args)

    {

        Object sampleObject = new BigDecimal(10000000.45);

        System.out.println((String)sampleObject);

    }

}

Output :

Exception in thread “main” java.lang.ClassCastException: class java.math.BigDecimal cannot be cast to class java.lang.String (java.math.BigDecimal and java.lang.String are in module java.base of loader ‘bootstrap’)

at Main.main(Main.java:11)

We can fix the exception printing by means of converting the code in the below format:

Java

import java.math.BigDecimal;

public class ClassCastExceptionExample {

    public static void main(String[] args)

    {

        Object sampleObject = new BigDecimal(10000000.45);

        System.out.println(String.valueOf(sampleObject));

    }

}

Output

10000000.4499999992549419403076171875

So, in any instances when we try to convert data type of object, we cannot directly downcast or upcast to a specified data type. Direct casting will not work and it throws ClassCastException. Instead, we can use

String.valueOf() method. It converts different types of values like int, long, boolean, character, float etc., into the string. 

  1. public static String valueOf(boolean boolValue)
  2. public static String valueOf(char charValue)
  3. public static String valueOf(char[] charArrayValue)
  4. public static String valueOf(int intValue)
  5. public static String valueOf(long longValue)
  6. public static String valueOf(float floatValue)
  7. public static String valueOf(double doubleValue)
  8. public static String valueOf(Object objectValue)

are the different methods available and in our above example, the last method is used.

Between Parent and Child class. Example shows that the instance of the parent class cannot be cast to an instance of the child class.

Java

class Vehicle {

    public Vehicle()

    {

        System.out.println(

            "An example instance of the Vehicle class to proceed for showing ClassCastException");

    }

}

final class Bike extends Vehicle {

    public Bike()

    {

        super();

        System.out.println(

            "An example instance of the Bike class that extends Vehicle as parent class to proceed for showing ClassCastException");

    }

}

public class ClassCastExceptionExample {

    public static void main(String[] args)

    {

        Vehicle vehicle = new Vehicle();

        Bike bike = new Bike();

        Bike bike1 = new Vehicle();

        bike = vehicle;

    }

}

Compiler error :

Compile time error occurrence when tried to convert parent object to child object

In order to overcome Compile-time errors, we need to downcast explicitly. i.e. downcasting means the typecasting of a parent object to a child object. That means features of parent object lost and hence there is no implicit downcasting possible and hence we need to do explicitly as below way

Giving the snippet where the change requires. In the downcasting Explicit way

Java

class Vehicle {

    String vehicleName;

    void displayData()

    {

        System.out.println("From Vehicle class");

    }

}

class Bike extends Vehicle {

    double cost;

    @Override void displayData()

    {

        System.out.println("From bike  class" + cost);

    }

}

public class ClassCastExceptionExample {

    public static void main(String[] args)

    {

        Vehicle vehicle = new Bike();

        vehicle.vehicleName = "BMW";

        Bike bike = (Bike)vehicle;

        bike.cost = 1000000;

        System.out.println(bike.vehicleName);

        System.out.println(bike.cost);

        bike.displayData();

    }

}

Output

BMW
1000000.0
From bike  class1000000.0

Upcasting implicit way

An example for upcasting of the child object to the parent object. It can be done implicitly. This facility gives us the flexibility to access the parent class members.

Java

class Vehicle {

    String vehicleName;

    void displayData()

    {

        System.out.println("From Vehicle class");

    }

}

class Bike extends Vehicle {

    double cost;

    @Override void displayData()

    {

        System.out.println("From bike  class..." + cost);

    }

}

public class ClassCastExceptionExample {

    public static void main(String[] args)

    {

        Vehicle vehicle = new Bike();

        vehicle.vehicleName = "Harley-Davidson";

        System.out.println(vehicle.vehicleName);

        vehicle.displayData();

    }

}

Output

Harley-Davidson
From bike  class...0.0

Fixing ClassCastException in an upcasting way and at the same time, loss of data also occurs

Java

class Vehicle {

    public Vehicle()

    {

        System.out.println(

            "An example instance of the Vehicle class to proceed for showing ClassCast Exception");

    }

    public String display()

    {

        return "Vehicle class display method";

    }

}

class Bike extends Vehicle {

    public Bike()

    {

        super();

        System.out.println(

            "An example instance of the Bike class that extends \nVehicle as parent class to proceed for showing ClassCast Exception");

    }

    public String display()

    {

        return "Bike class display method";

    }

}

public class ClassCastExceptionExample {

    public static void main(String[] args)

    {

        Vehicle vehicle = new Vehicle();

        Bike bike = new Bike();

        vehicle = bike;

        System.out.println(

            "After upcasting bike(child) to vehicle(parent).."

            + vehicle.display());

    }

}

Output

An example instance of the Vehicle class to proceed for showing ClassCast Exception
An example instance of the Vehicle class to proceed for showing ClassCast Exception
An example instance of the Bike class that extends 
Vehicle as parent class to proceed for showing ClassCast Exception
After upcasting bike(child) to vehicle(parent)..Bike class display method

Conclusion: By means of either upcasting or downcasting, we can overcome ClassCastException if we are following Parent-child relationships. String.valueOf() methods help to convert the different data type to String and in that way also we can overcome.

Last Updated :
12 Dec, 2022

Like Article

Save Article

Перечень наиболее часто встречающихся исключений (исключительных ситуаций, ошибок) в языке программирования java с расшифровкой их значения.

Зміст

  1. ArithmeticException 
  2. ArrayIndexOutOfBoundsException 
  3. ArrayStoreException 
  4. ClassCastException 
  5. ConcurrentModificationException 
  6. EmptyStackException
  7. IllegalArgumentException 
  8. IllegalMonitorStateException 
  9. IllegalStateException 
  10. IllegalThreadStateException 
  11. IndexOutOfBoundsException 
  12. MissingResourceException 
  13. NegativeArraySizeException 
  14. NoSuchElementException 
  15. NullPointerException 
  16. NumberFormatException
  17. SecurityException
  18. StringIndexOutOfBoundsException
  19. UndeclaredThrowableException
  20. UnsupportedOperationException 

ArithmeticException 

Возникла исключительная ситуация, связанная с ошибкой при выполнении арифметического вычисления (например, с попыткой целочисленного деления на нуль). Класс ArithmeticalException унаследован от RuntimeException.

ArrayIndexOutOfBoundsException 

Задано значение индекса массива, не принадлежащее допустимому диапазону. Имеется дополнительный конструктор, принимающий в качестве параметра ошибочное значение индекса и включающий его в текст описательного сообщения. Класс ArrayIndexOutOfBoundsException унаследован от IndexOutOfBoundException

ArrayStoreException 

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

Класс ArrayStoreException унаследован от RuntimeException.

ClassCastException 

Выполнена неверная операция преобразования типов (ошибка приведения типов).

Класс ClassCastException унаследован от RuntimeException.

ConcurrentModificationException 

Осуществлена попытка изменения объекта конкурирующим потоком вычислений (thread) с нарушением контракта класса (тип определен в пакете jav.util).

Также исключение может происходить при работе с коллекциями при обычной однопоточной работе. ConcurrentModificationException возникает когда коллекция модифицируется «одновременно» с проходом по коллекции итератором любыми средствами кроме самого итератора.

Класс ConcurrentModificationException унаследован от RuntimeException.

EmptyStackException

Возникает при попытке извлечения объекта из пустого стека. Тип обладает только конструктором без параметров, поскольку причина ситуации очевидна без дополнительных разъяснений (тип определен в пакете java.util). 

Класс EmptyStackExceptionунаследован от RuntimeException.

IllegalArgumentException 

Методу передано неверное значение аргумента (например, отрицательное, когда метод предполагает задание положительных значений).

Класс IllegalArgumentExceptionунаследован от RuntimeException.

IllegalMonitorStateException 

Выполнено обращение к методу wait, notifyAll или notify объекта, когда текущий поток вычислений не обладает блокировкой (lock) этого объекта.

Класс IllegalMonitorStateException унаследован от RuntimeException.

IllegalStateException 

Предпринята попытка выполнения операции в то время, когда объект не находится в соответствующем состоянии (например при регистрации или удалении ловушки события закрытия исполняющей системы (shutdown hook) после начала процедуры закрытия).

Класс IllegalStateExceptionунаследован от RuntimeException.

IllegalThreadStateException 

Предпринята попытка выполнения операции в то время, когда объект потока вычислений не находится в соответствующем состоянии (например, вызван метод start для потока, который уже приступил к работе).

Класс IllegalThreadStateException унаследован от IllegalArgumentException

IndexOutOfBoundsException 

Задано значение индекса массива или содержимого строки типа String, не принадлежащее допустимому диапазону.

Класс IndexOutOfBoundsException унаследован от RuntimeException

MissingResourceException 

Не найден требуемый ресурс или пакет ресурсов (resource bundle). Единственный конструктор типа предусматривает задание трех аргументов: строки описательного сообщения, наименования класса ресурсов и объекта ключа, отвечающего отсутствующему ресурсу. Для получения строк наименования класса и ключа применяются методы detClassName и getKey соответственно (тип определен в пакете java.util).

Класс MissingResourceExceptionунаследован от RuntimeException.

NegativeArraySizeException 

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

Класс NegativeArraySizeException унаследован от RuntimeException.

NoSuchElementException 

Операция поиска элемента в объекте одного из контейнерных классов завершилась неудачей (тип определен в пакете java.util).

Класс NoSuchElementException унаследован от RuntimeException.

NullPointerException 

Возникает при попытке обращения к полю, методу или объекту по ссылке, равной null. Также исключение выбрасывается, когда метод, не допускающий передачи аргумента null, был вызван с заданием значения null. В последнем случае может быть сгенерировано и исключение типа IllegalArgumentException.

Класс NullPointerException унаследован от RuntimeException.

NumberFormatException

Строка, которая, как предполагалось должна содержать представление числа, не отвечает этому требованию. Исключение выбрасывается такими методами, как, например, Integer.parseInt.

Класс NumberFormatException унаследован от IllegalArgumentException.

SecurityException

Предпринята попытка выполнения операции, запрещенной системой обеспечения безопасности в соответствии с действующей политикой безопасности.

Класс SecurityException унаследован от RuntimeException.

StringIndexOutOfBoundsException

Задано значение индекса содержимого строки типа String, не принадлежащее допустимому диапазону. Имеется дополнительный конструктор, принимающий в качестве параметра ошибочное значение индекса и включающий его в текст описательного сообщения.

Класс StringIndexOutOfBoundsException унаследован от IndexOutOfBoundsException.

UndeclaredThrowableException

Выбрасывается при обращении к методу целевого объекта посредством объекта рефлективного класса Proxy, если метод invoke объекта InvocationHandler генерирует объявляемое исключение, которое не допускает присваивания ни одному из типов исключений, упомянутых в предложении throws метода целевого объекта. Рассматриваемое исключение содержит ссылку на исключение, генерируемое методом invoke, которое может быть получено с помощью метода getUndeclaredThrowable. Класс исключений UndeclaredThrowableException поддерживает два конструктора: оба принимают в качестве параметров ссылку на объект Throwable, а один из них, помимо того, строку описания (тип определен в пакете java.lang.reflect).

Класс UndeclaredThrowableException унаследован от RuntimeException.

UnsupportedOperationException 

Предпринята попытка выполнения операции над объектом, который ее не поддерживает (например, модификация объекта, обозначенного признаком “только для чтения”). используется также классами коллекций из состава пакета java.util как реакция на вызов методов производного класса, реализация которых не обязательна.

Класс UnsupportedOperationException унаследован от RuntimeException.

Смотрите также: Методы обработки исключений в java

Почему возникает Ошибка ПРИВЕДЕНИЯ ТИПОВ в строке

return (Integer[]) list.toArray();
public class Solution {

    public static void main(String[] args) {
        Integer[] arr = new Integer[]{13, 8, 15, 5, 17};
        for(Integer i:sort(arr)){
            System.out.println(i);
        }
    }

    public static Integer[] sort(Integer[] array) {
        ArrayList<Integer> list = new ArrayList<>(Arrays.asList(array));
        Collections.sort(list);
        double mediana;
        if (list.size()%2!=0) mediana = list.get(list.size()/2);
        else mediana = ( list.get(list.size()/2) + list.get(list.size()/2-1) )*(1.0)/2;

        Comparator<Integer> compAbs = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                double d1 = Math.abs(o1-mediana);
                double d2 = Math.abs(o2-mediana);
                return (d1 - d2)<0?-1:d1-d2==0?0:1;
            }
        };

        Collections.sort(list,compAbs);

        return (Integer[]) list.toArray();
    }
}

А вот в этом примере Ошибки НЕТУ!!! Почему ее во втором примере нет, а впервом есть. Мы же в обеих случаях делаем ОПЕРАЦИЮ ПРИВЕДЕНИЯ К ТИПУ (Integer[])

public class Main {
    public static void main(String[] args) {
       List<Integer> wordsList = Arrays.asList(1,2,3,4);
        Integer[] wordsArray = (Integer[]) wordsList.toArray();

        for (Integer word : wordsArray) {
            System.out.println(word);
        }

    }
}

What We Are Learn On This Post

ClassCastException In Java: In this post, we are going to discuss ClassCastException. A class cast exception is thrown by Java when you try to cast an Object of one data type to another. Java allows us to cast variables of one type to another as long as the casting happens between compatible data types.

ClassCastException In Java

As you can see in the above pic ClassCast-Exception exception extends the class RuntimeException and thus, belongs to those exceptions that can be thrown during the operation of the Java Virtual Machine (JVM). It is an unchecked exception and thus, it does not need to be declared in a method’s or a constructor’s throws clause.

java.lang.classcastexception In Java:

An object can be automatically upcasted to its superclass type. You need not mention class type explicitly. But, when an object is supposed to be downcasted to its subclass type, then you have to mention class type explicitly. In such a case, there is a possibility of occurring class cast exception. Most of the time, it occurs when you are trying to downcast an object explicitly to its subclass type.

package co.java.exception;
public class ClassCast_Exception 
{
   public static void main(String[] args) 
   {
      Object obj=new Object();
      int i=(int) obj;
      System.out.println(i);
   }
}

Lets Run The Above Program:

When we run the above program we got the below error:

Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.Integer at co.java.exception.ClassCastException.main(ClassCast-Exception.java:8)

Let’s take another example:

package co.java.exception;
class Parent {
   public Parent() {
      System.out.println("An instance of the Parent class was created!");
   }
}
final class Child extends Parent {
   public Child() {
      super();
      System.out.println("An instance of the Child class was created!");
   }
}
public class ClassCast-ExceptionExample {
   public static void main(String[] args) {
      Parent p = new Parent();
      Child ch = new Child();
      ch = (Child) p; //This statement is not allowed.
   }
}

If we run the program then we will get

An instance of the Parent class was created!
An instance of the Parent class was created!
An instance of the Child class was created!
Exception in thread "main" java.lang.ClassCastException: co.java.exception.Parent cannot be cast to co.java.exception.Child at co.java.exception.ClassCastExceptionExample.main(ClassCastExceptionExample.java:20)

Explanation:

In The Above Program, we are creating an instance of both the parent and child class. but when we are trying to assign the parent class instance to child class instance that will generate an exception.

Ref: Article

Reader Interactions

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Ошибка приватности что это и как ее убрать
  • Ошибка при чтении файла образца автокад
  • Ошибка при чтении файла корел драв
  • Ошибка при чтении файла корел что делать
  • Ошибка при чтении файла консультант плюс sp4 nx

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии