Короткий ответ НЕТ, у нас на этом этапе в 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;
Прямо из спецификаций API для ClassCastException
:
Брошено, чтобы указать, что код попытался передать объект подклассу, из которого он не экземпляр.
Так, например, когда вы пытаетесь передать
Integer
вString
,String
не является подклассомInteger
, поэтому aClassCastException
.Object i = Integer.valueOf(42); String s = (String)i; // ClassCastException thrown here.
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.
Это очень просто: если вы пытаетесь придать объект класса A объекту класса B, и они несовместимы, вы получаете исключение класса cast.
Давайте подумаем набор классов.
class A {...}
class B extends A {...}
class C extends A {...}
Вы пытаетесь рассматривать объект как экземпляр класса, которого нет. Это примерно аналогично попытке нажимать педаль демпфера на гитаре (у пианино есть демпферные педали, гитары - нет).
Рассмотрим пример,
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
:
Вы понимаете концепцию кастинга? Кастинг - это процесс преобразования типов, который в 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.
Вы можете лучше понять ClassCastException и кастинг, как только вы поймете, что JVM не может угадать неизвестное. Если B является экземпляром A, он имеет больше членов класса и методов в куче, чем A. JVM не может угадать, как отличать A до B, поскольку цель сопоставления больше, а JVM не знает, как заполнить дополнительные элементы.
Но если A был экземпляром B, это было бы возможно, потому что A является ссылкой на полный экземпляр B, поэтому отображение будет взаимно однозначным.
Очень хороший пример, который я могу дать вам для 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, это вызовет исключение.
ClassCastException
. Итак, если элементы не реализуютComparable
, тогдаCollections.sort()
выкинет это исключение – overexchange 4 October 2017 в 23:49