Кастинг из & ldquo; Ресурс & rdquo; к коллекции & lt ;? extends & ldquo; Resource & rdquo; & gt; [Дубликат]

Короткий ответ НЕТ, у нас на этом этапе в CSS нет parent selector, но если вы все равно не хотите менять элементы или классы, второй вариант использует JavaScript, что-то вроде этого:

var activeATag = Array.prototype.slice.call(document.querySelectorAll('a.active'));

activeATag.map(function(x) {
  if(x.parentNode.tagName === 'LI') {
    x.parentNode.style.color = 'red'; //your property: value;
  }
});

или более короткий путь, если вы используете jQuery в своем приложении:

$('a.active').parents('li').css('color', 'red'); //your property: value;
57
задан Peter Mortensen 16 November 2016 в 23:46
поделиться

11 ответов

Прямо из спецификаций API для ClassCastException :

Брошено, чтобы указать, что код попытался передать объект подклассу, из которого он не экземпляр.

Так, например, когда вы пытаетесь передать Integer в String, String не является подклассом Integer, поэтому a ClassCastException.

Object i = Integer.valueOf(42);
String s = (String)i;            // ClassCastException thrown here.
88
ответ дан coobird 19 August 2018 в 17:07
поделиться
  • 1
    При любой сортировке все предметы должны быть сопоставимы друг с другом (взаимно сопоставимы). Если это не так, будет выбрано ClassCastException. Итак, если элементы не реализуют Comparable, тогда Collections.sort() выкинет это исключение – overexchange 4 October 2017 в 23:49

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.

0
ответ дан Ananta Chandra Das 19 August 2018 в 17:07
поделиться

Это очень просто: если вы пытаетесь придать объект класса A объекту класса B, и они несовместимы, вы получаете исключение класса cast.

Давайте подумаем набор классов.

class A {...}
class B extends A {...}
class C extends A {...}
  1. Вы можете передать любую из этих вещей объекту, потому что все классы Java наследуются от Object.
  2. Вы можете использовать либо B, либо C к A, потому что они оба являются «видами» A
  3. . Вы можете ссылаться на объект A на B , только если реальный объект является B.
  4. Вы не можете отбрасывать B на C, даже если они оба A.
66
ответ дан Charlie Martin 19 August 2018 в 17:07
поделиться

Вы пытаетесь рассматривать объект как экземпляр класса, которого нет. Это примерно аналогично попытке нажимать педаль демпфера на гитаре (у пианино есть демпферные педали, гитары - нет).

3
ответ дан Jeremy Huiskamp 19 August 2018 в 17:07
поделиться

Рассмотрим пример,

class Animal {
    public void eat(String str) {
        System.out.println("Eating for grass");
    }
}

class Goat extends Animal {
    public void eat(String str) {
        System.out.println("blank");
    }
}

class Another extends Goat{
  public void eat(String str) {
        System.out.println("another");
  }
}

public class InheritanceSample {
    public static void main(String[] args) {
        Animal a = new Animal();
        Another t5 = (Another) new Goat();
    }
}

В Another t5 = (Another) new Goat(): вы получите ClassCastException, потому что вы не можете создать экземпляр класса Another, используя Goat.

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

Как работать с ClassCastException:

  1. Будьте внимательны при попытке применить объект класса к другому классу. Убедитесь, что новый тип принадлежит одному из его родительских классов.
  2. Вы можете предотвратить исключение ClassCastException с помощью Generics, поскольку Generics предоставляют проверки времени компиляции и могут быть использованы для разработки приложений с типом безопасности.

Источник примечания и остальные

16
ответ дан Kick Buttowski 19 August 2018 в 17:07
поделиться
  • 1
    Не обязательно downcast - если Cat был подклассом Animal и вы пытались бросить на Dog, вы получите то же исключение – barry 7 February 2017 в 09:25

Вы понимаете концепцию кастинга? Кастинг - это процесс преобразования типов, который в Java очень распространен, потому что это статически типизированный язык. Некоторые примеры:

Вставить строку «1» в int -> no problem

Вставить строку «abc» в int -> вызывает ClassCastException

Или подумайте о диаграмме классов с Animal.class, Dog.class и Cat.class

Animal a = new Dog();
Dog d = (Dog) a; // No problem, the type animal can be casted to a dog, because its a dog.
Cat c = (Dog) a; // Raises class cast exception; you can't cast a dog to a cat.
4
ответ дан Mirror's Edge Gamer 19 August 2018 в 17:07
поделиться
  • 1
    Быть маленьким nitpicky, но String & quot; 1 & quot; не может быть "брошенным" к int, но он может быть преобразован в int с помощью метода Integer.parseInt (String). – coobird 25 May 2009 в 18:01
  • 2
    – karlihnos 31 August 2018 в 07:54

Вы можете лучше понять ClassCastException и кастинг, как только вы поймете, что JVM не может угадать неизвестное. Если B является экземпляром A, он имеет больше членов класса и методов в куче, чем A. JVM не может угадать, как отличать A до B, поскольку цель сопоставления больше, а JVM не знает, как заполнить дополнительные элементы.

Но если A был экземпляром B, это было бы возможно, потому что A является ссылкой на полный экземпляр B, поэтому отображение будет взаимно однозначным.

3
ответ дан Peter Mortensen 19 August 2018 в 17:07
поделиться

Очень хороший пример, который я могу дать вам для classcastException в Java, используется при использовании «Collection»

List list = new ArrayList();
list.add("Java");
list.add(new Integer(5));

for(Object obj:list) {
    String str = (String)obj;
}

. Этот выше код даст вам ClassCastException во время выполнения. Поскольку вы пытаетесь использовать Integer для String, это вызовет исключение.

2
ответ дан Suganthan Madhavan Pillai 19 August 2018 в 17:07
поделиться
0
ответ дан Akshay Nevrekar 31 October 2018 в 03:52
поделиться
16
ответ дан Kick Buttowski 31 October 2018 в 03:52
поделиться
3
ответ дан Peter Mortensen 31 October 2018 в 03:52
поделиться
Другие вопросы по тегам:

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