Java ClassCastException - это исключение, которое может возникнуть при попытке неправильно преобразовать класс из одного типа в другой.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ClassCastExceptionExample {
public ClassCastExceptionExample() {
List list = new ArrayList();
list.add("one");
list.add("two");
Iterator it = list.iterator();
while (it.hasNext()) {
// intentionally throw a ClassCastException by trying to cast a String to an
// Integer (technically this is casting an Object to an Integer, where the Object
// is really a reference to a String:
Integer i = (Integer)it.next();
}
}
public static void main(String[] args) {
new ClassCastExceptionExample();
}
}
Если вы попытаетесь запустить эту программу Java, вы увидите, что она выдает следующее ClassCastException:
Exception in thread "main" java.lang.ClassCastException: java.lang.String
at ClassCastExceptionExample (ClassCastExceptionExample.java:15)
at ClassCastExceptionExample.main (ClassCastExceptionExample.java:19)
Причина, по которой возникает исключение, заключается в том, что когда я создаю свой объект списка, объект, который я храню в списке, является строкой «один», но затем позже, когда я попытаюсь вытащить этот объект, я намеренно совершу ошибку, пытаясь передать его в Integer. Поскольку String не может быть напрямую применена к Integer - целое не является типом String - генерируется исключение ClassCastException.
Вы можете присвоить ему действительное имя переменной с помощью этого синтаксиса:
var {"my name": myName, age} = obj2;
// use myName here
Когда у меня есть объект с пробелами в имени свойства, я могу использовать деструктурирование объекта или нет?
blockquote>Да, вы можете использовать деструктурирование, но вы всегда можете назначать только идентификаторы (имена переменных). Поскольку они не позволяют пробелы, вы не можете использовать синтаксис коротких строк, где имя и идентификатор свойства одинаковы.
Было бы неплохо, если бы я мог назначить переменную с каким-то синтаксисом типа " as ':
blockquote>var {'my name' as name, age} = obj2;
as
предназначен для импорта / экспорта модулей. Для обычных объектов - как литералов, так и деструктурирования - вы используете двоеточие:
:var {'my name': name, age} = obj2;
extract()
, или есть?
– Ifedi Okonkwo
15 December 2016 в 08:43