Как я могу использовать назначение деструктуризации JavaScript при конфликте имен [duplicate]

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.

9
задан Felix Kling 15 December 2016 в 17:16
поделиться

2 ответа

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

var {"my name": myName, age} = obj2; 

// use myName here
14
ответ дан David Sherret 19 August 2018 в 19:56
поделиться

Когда у меня есть объект с пробелами в имени свойства, я могу использовать деструктурирование объекта или нет?

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

Было бы неплохо, если бы я мог назначить переменную с каким-то синтаксисом типа " as ':

var {'my name' as name, age} = obj2;

as предназначен для импорта / экспорта модулей. Для обычных объектов - как литералов, так и деструктурирования - вы используете двоеточие ::

var {'my name': name, age} = obj2;
5
ответ дан Bergi 19 August 2018 в 19:56
поделиться
  • 1
    Я использовал ключевое слово «как» для импорта модулей. Я думал, что существует какой-то подобный синтаксис при разрушении объектов ... спасибо за объяснение, хотя :) – keano 12 April 2016 в 19:13
  • 2
    Интересно, никогда не знал этого! Жаль, что нет возможности динамически разрушить объект, похожий на PHP extract(), или есть? – Ifedi Okonkwo 15 December 2016 в 08:43
  • 3
    @IfediOkonkwo Динамические имена переменных - лаваш. И на самом деле JS имеет их - но вы действительно не хотите использовать это. Лучше использовать имена вычисленных свойств и разрушать известные переменные. – Bergi 15 December 2016 в 09:10
Другие вопросы по тегам:

Похожие вопросы: