Ошибка при определении строковой константы - PullRequest
0 голосов
/ 04 декабря 2009

Дано:

public static final String XML_POLICY =
            "<?xml version="1.0"?>"
            +"<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">"
            + "<cross-domain-policy>"
            + "<allow-access-from domain="*" to-ports="*" />"
            + "</cross-domain-policy>";

Я получаю ошибки компиляции на

"<?xml version="1.0"?>"

там написано ';' ожидается.

и

+"<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">"

он говорит "не может найти символ, символ: class xml и class dtds"

Что может быть возможной причиной? IDE - Netbeans 6.8 Beta.

Ответы [ 4 ]

3 голосов
/ 04 декабря 2009

Вы должны избегать двойных кавычек - и это не только первая строка. Строки doctype и allow-access-from тоже этого требуют.

// Reformatted slightly to avoid scrolling :)
public static final String XML_POLICY =
  "<?xml version=\"1.0\"?>"
  + "<!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\">"
  + "<cross-domain-policy>"
  + "<allow-access-from domain=\"*\" to-ports=\"*\" />"
  + "</cross-domain-policy>";

В качестве альтернативы можно использовать одинарные кавычки в XML, что прекрасно в большинстве мест и упрощает чтение кода:

public static final String XML_POLICY =
    "<?xml version='1.0'?>"
    +"<!DOCTYPE cross-domain-policy SYSTEM '/xml/dtds/cross-domain-policy.dtd'>"
    + "<cross-domain-policy>"
    + "<allow-access-from domain='*' to-ports='*' />"
    + "</cross-domain-policy>";

Обратите внимание, что в этом нет ничего специфичного для Netbeans или XML. Двойная кавычка используется для обозначения начала и конца строки, поэтому вам нужно избегать ее, если вы хотите, чтобы она была в середине. Например:

String x = "I said, \"Hello.\" The child laughed.";

Существуют различные другие escape-последовательности в Java - для получения более подробной информации см. раздел 3.10.6 спецификации языка .

2 голосов
/ 04 декабря 2009
2 голосов
/ 04 декабря 2009

вы должны экранировать "внутри строки:

public static final String XML_POLICY =     
        "<?xml version=\"1.0\"?>" + // etc etc
0 голосов
/ 04 декабря 2009

Я думаю, что вопрос хорошо ответил, но только примечание / подсказка:
благодаря подсветке синтаксиса часть текста должна быть по-разному окрашена, указывая, что она не является частью литерала.
Netbeans должен включать подсветку синтаксиса (по умолчанию?). Stackoverflow также имеет подсветку синтаксиса, просто посмотрите на код в вопросе (выше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...