Class java lang string cannot be cast to class java lang double

Ошибка при переводе из одного типа данных в другой

При переводе из одного типа данных в другой в среде NETBeanse возникает следующая ошибка:

Exception in thread «AWT-EventQueue-0» java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double

Возникает она при попытке записи арифметического действия в текст лейбла:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
double[][] matrixA; matrixA=new double[3][3]; double res=0; String str; for (int i=0; i3; i++) { for (int j=0; j3; j++) { matrixA[i][j]=(Double)jTable1.getValueAt(i, j); res=res+matrixA[i][j]; str=Double.toString(res); jLabel1.setText(str); } }

Конвертация данных одного типа в другой
Можно ли в PascalABC.NET, благодаря .NET’у как-то конвертировать один формат в другой? Например.

Из одного типа данных записать в другой
в общем задание такое: процессор .8086 A dw 128 dup(??) N db.

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

Ошибка подключения при переводе Базы данных из SQL SERVER в Mysql
Второй день пытаюсь перевести базу из SQL SERVER на Mysql через Workbench. :wall: Оба сервера.

Источник

How to fix java.lang.classcastexception cannot be cast to in Java — cause and solution

As name suggests ClassCastException in Java comes when we try to type cast an object and object is not of the type we are trying to cast into. In fact ClassCastException in Java is one of most common exception in Java along with java.lang.OutOfMemoryError and ClassNotFoundException in Java before Generics was introduced in Java 5 to avoid frequent instances of java.lang.classcastexception cannot be cast to while working with Collection classes like ArrayList and HashMap, which were not type-safe before Java 5. Though we can minimize and avoid java.lang.ClassCastException in Java by using Generics and writing type-safe parameterized classes and method, its good to know real cause of ClassCastException and How to solve it.

In this Java tutorial we will see Why java.lang.ClassCastException comes and how to resolve ClassCastException in Java. We will also see how to minimize or avoid ClassCastException in Java by using Generics, as prevention is always better than cure.

Cause of java.lang.ClassCastException in Java

How to fix java.lang.ClassCastException in Java cause and solution

In order to understand cause of ClassCastException , you need to be familiar with concept of type casting in Java. Since Java is an object oriented programming language and supports features like Inheritance and Polymorphism, a reference variable of type parent class can represent object of child class. This leads to ClassCastException if object is not of type on which you are casting it. It can be best explained with an example. Let’s see a sample code which will throw ClassCastException in Java:

Exception in thread «main» java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

If you see closely we were trying to cast an String object into an Integer object which is not correct and that’s why Java throws java.lang.classcastexception cannot be cast to error . Problems can become more difficult if all class are closely related.

Since due to polymorphism in Java an Object instance can hold any type of Object but you can only cast between same type. what makes this problem worse is that it only comes during runtime, ClassCastException doesn’t come at compile time which makes it hard to detect specially in large enterprise Java application or high frequency electronic trading system where input comes from upstream and in production various kinds of input are available.

This was frequent problem with Java Collection classes like LinkedList and HashSet in Java which holds Object type but with introduction of Generics in Java 5 solved this problem by checking type-safety during compile time. Which means you can not store Integers on LinkedList of String, from Java 5 it will result in compile time error.

Common source of java.lang.ClassCastException

1. Java Collection classes like HashMap , ArrayList , Vector or Hashtable which is not using Generics.

2. Methods which were written to take advantage of polymorphic behavior and coded on interfaces prior to Java 5 and doesn’t used parameter to provide type-safety. look for all places where you have used cast operator in Java and verify that whether that code is type-safe or not.

Here are some of the most frequently occurred ClassCastException in Java:

java.lang.classcastexception java.lang.string cannot be cast to java.lang.integer

This will come when you try to cast String object to Integer i.e.
Integer number = (Integer) stringObject;

java.lang.classcastexception java.lang.string cannot be cast to java.util.date :
This error will come when you cast String to Date in Java, since both are not related to each other, it will not possible to typecast them.

java.lang.classcastexception java.util.arraylist cannot be cast to java.lang.string
I have seen this happening a lot in beginners code based on Java Collection framework, Since ArrayList and String are not related to each other, following casting will throw this error :

String str = (String) arrayListObject;

But if you definitely wants to convert ArrayList to String, than check this post about converting collection to String in Java.

Here are couple of more examples, which is self explanatory.

java.lang.classcastexception java.util.arraylist cannot be cast to java.util.map
java.lang.classcastexception ljava.lang.object cannot be cast to ljava.lang.comparable
java.lang.classcastexception ljava.lang.object cannot be cast to ljava.lang.integer
java.lang.classcastexception ljava.lang.object cannot be cast to java.util.list
java.util.arraylist cannot be cast to java.lang.comparable

How to fix java.lang.ClassCastException in Java

Solving ClassCastException can be very easy once you understand polymorphism in Java and difference between compile time and runtime things. ClassCastException are simple like NullPointerException just look the stack-trace and go to the line number. Many of advanced Java IDE like Eclipse and Netbeans will give you hyperlink to navigate till culprit line number in Java file.

Now you know where exactly ClassCastException is coming and stack trace also told which object it was trying to cast, Now you have to find, how that type of object comes and this could take some time based upon complexity of your java application. You can also prevent ClassCastException in Java by using Generics.

Generics are designed to write type-safe code and provides compile-time checks which tends to violate type-safety. By using Generics in Collection classes and other places you can safely minimize java.lang.ClassCastException in Java.

That’s all on What is ClassCastException in Java and how to solve Exception in thread «main» java.lang.ClassCastException. I highly recommend to use Generics while using any Collection classes or class which acts as container e.g. ThreadLocal in Java. Also write your own classes and method to take advantage of Generics to provide type-safety as shown in this example of How to write parameterized class. It’s also a good idea to refresh your knowledge on type-casting in Java.

Источник

Объяснение ClassCastException в Java

Давайте подробнее рассмотрим исключение ClassCastException.

1. Обзор

В этом коротком уроке мы сосредоточимся на ClassCastException , общем исключении Java .

ClassCastException – это непроверенное исключение , которое сигнализирует о том, что код попытался привести ссылку на тип, к которому он не является подтипом .

Давайте рассмотрим некоторые сценарии, которые приводят к возникновению этого исключения, и как мы можем их избежать.

2. Явный Кастинг

Для наших следующих экспериментов рассмотрим следующие классы:

public class Mammal implements Animal < @Override public String getName() < return "Mammal"; >>
public class Amphibian implements Animal < @Override public String getName() < return "Amphibian"; >>
public class Frog extends Amphibian < @Override public String getName() < return super.getName() + ": Frog"; >>

2.1. Классы литья

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

Например, давайте попробуем бросить Лягушку в Млекопитающее :

Frog frog = new Frog(); Mammal mammal = (Mammal) frog;

Мы могли бы ожидать здесь ClassCastException , но на самом деле мы получаем ошибку компиляции: “несовместимые типы: Лягушка не может быть преобразована в млекопитающее”. Однако ситуация меняется, когда мы используем общий супертип:

Animal animal = new Frog(); Mammal mammal = (Mammal) animal;

Теперь мы получаем ClassCastException из второй строки:

Exception in thread "main" java.lang.ClassCastException: class Frog cannot be cast to class Mammal (Frog and Mammal are in unnamed module of loader 'app') at Main.main(Main.java:9)

Проверенное значение Mammal несовместимо со ссылкой Frog , поскольку Frog не является подтипом Mammal . В этом случае компилятор не может нам помочь, так как переменная Animal может содержать ссылку совместимого типа.

Интересно отметить, что ошибка компиляции возникает только тогда, когда мы пытаемся привести к однозначно несовместимому классу. То же самое не относится к интерфейсам, поскольку Java поддерживает наследование нескольких интерфейсов, но только одно наследование для классов. Таким образом, компилятор не может определить, реализует ли ссылочный тип определенный интерфейс или нет. Давайте приведем пример:

Animal animal = new Frog(); Serializable serial = (Serializable) animal;

Мы получаем ClassCastException во второй строке вместо ошибки компиляции:

Exception in thread "main" java.lang.ClassCastException: class Frog cannot be cast to class java.io.Serializable (Frog is in unnamed module of loader 'app'; java.io.Serializable is in module java.base of loader 'bootstrap') at Main.main(Main.java:11)

2.2. Литейные массивы

Мы видели, как классы обрабатывают приведение, теперь давайте посмотрим на массивы. Приведение массива работает так же, как и приведение класса. Однако мы можем запутаться в автобоксах и продвижении типов или их отсутствии.

Таким образом, давайте посмотрим, что происходит с примитивными массивами, когда мы пытаемся выполнить следующее приведение:

Object primitives = new int[1]; Integer[] integers = (Integer[]) primitives;

Вторая строка вызывает исключение ClassCastException as autoboxing не работает для массивов.

Как насчет продвижения по службе? Давайте попробуем следующее:

Object primitives = new int[1]; long[] longs = (long[]) primitives;

Мы также получаем исключение ClassCastException , потому что продвижение типа не работает для целых массивов.

2.3. Безопасное литье

В случае явного приведения настоятельно рекомендуется проверить совместимость типов перед попыткой приведения с помощью instanceof .

Давайте рассмотрим пример безопасного приведения:

Mammal mammal; if (animal instanceof Mammal) < mammal = (Mammal) animal; >else < // handle exceptional case >

3. Загрязнение Кучи

В соответствии со спецификацией Java : ” Загрязнение кучи может произойти только в том случае, если программа выполнила какую-либо операцию с использованием необработанного типа, которая приведет к появлению непроверенного предупреждения во время компиляции”.

Для нашего эксперимента рассмотрим следующий универсальный класс:

public static class Box  < private T content; public T getContent() < return content; >public void setContent(T content) < this.content = content; >>

Теперь мы попытаемся загрязнить кучу следующим образом:

Box originalBox = new Box<>(); Box raw = originalBox; raw.setContent(2.5); Box bound = (Box) raw; Long content = bound.getContent();

Последняя строка вызовет исключение ClassCastException , поскольку она не может преобразовать ссылку D ouble в Long .

4. Общие типы

При использовании дженериков в Java мы должны быть осторожны с стиранием типов , что также может привести к ClassCastException в некоторых условиях.

Давайте рассмотрим следующий общий метод:

public static T convertInstanceOfObject(Object o) < try < return (T) o; >catch (ClassCastException e) < return null; >>

А теперь давайте назовем это:

String shouldBeNull = convertInstanceOfObject(123);

На первый взгляд, мы можем разумно ожидать нулевую ссылку, возвращаемую из блока catch. Однако во время выполнения из-за стирания типа параметр приводится к Object вместо String . Таким образом , компилятор сталкивается с задачей присвоения целого числа | строке , которая вызывает исключение ClassCastException.

5. Заключение

В этой статье мы рассмотрели ряд распространенных сценариев неподходящего кастинга.

Независимо от того, явные или неявные, приведение ссылок Java к другому типу может привести к ClassCastException , если целевой тип не совпадает или не является потомком фактического типа .

Код, используемый в этой статье, можно найти на GitHub .

Читайте ещё по теме:

Источник

Читайте также:  Java array string equals
Оцените статью