XML Пространства имен по умолчанию для неквалифицированных имен атрибутов?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

26
задан Deduplicator 10 February 2015 в 22:40
поделиться

2 ответа

Вы правы. Идея, лежащая в основе атрибутов, не являющихся частью пространства имен по умолчанию, заключается в том, что они считаются существующими в «пространстве имен элементов» & mdash; поэтому в этом случае <foo:child/> считается «пространством имен» для @attrib. Обратите внимание, что это просто концептуально; нет никакого API или чего-либо, что ссылается на пространства имен атрибутов таким образом.

Это было выбрано потому, что несколько элементов могут иметь атрибуты с одинаковыми именами, но разными значениями & mdash; в отличие от традиционного пространства имен, которое представляет собой набор имен (поэтому без дубликатов). В некотором смысле, это дает больше структуры пространству имен, вместо того, чтобы иметь плоский набор.

Вы можете прочитать об этом в очень старой версии рекомендации Пространства имен .

Это соглашение означает, что всякий раз, когда вы видите префиксный атрибут, он представляет некоторую «дополнительную» информацию, которая не связана с основной схемой в документе.

16
ответ дан porges 10 February 2015 в 22:40
поделиться

Ваша интерпретация спецификации верна. Некоторое обоснование также приводится во втором абзаце раздела 6.2 в спецификации пространств имен, на которую вы ссылались:

интерпретация нефиксированных атрибутов определяется элементом, на котором они появляются.

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

2
ответ дан Jörn Horstmann 10 February 2015 в 22:40
поделиться
Другие вопросы по тегам:

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