Зарезервированные слова как имена или идентификаторы

23
задан Stephen C 24 March 2019 в 14:04
поделиться

11 ответов

Нет, нет никакого пути. Вот почему они маркированы "зарезервированными".

28
ответ дан Salty 29 November 2019 в 00:37
поделиться

Нет никакого способа использовать зарезервированные слова с компилятор javac .

Технически, Вы можете редактировать имена в файле класса, как только он скомпилировал , чтобы быть чем-либо, что Вы хотите: на том этапе не заботится VM, потому что это не имеет дело с исходным кодом больше. Я полагаю, что некоторые obfuscators используют эту технику.

2
ответ дан Neil Coffey 29 November 2019 в 00:37
поделиться

Не уверенный, что Вы пытаетесь сделать, но $ является допустимым символом в идентификаторах, таким образом, Вы могли сделать, сказать:

int $return = 5;

Это выглядит немного странным, но это действительно работает.

2
ответ дан Bohemian 29 November 2019 в 00:37
поделиться

Это достаточно плохо, некоторые чувствительные к регистру языки позволяют вещи как следующее:

class New;

class Something
{
    New makeNew()
    {
      return new New();
    }
}

, Но почему был бы Вы когда-либо хотеть быть в состоянии записать строку кода как это:

class new;

class Something
{
    bool if;

    new makeNew()
    {
        return if ? new new() : null;
    }
}

Просто смотрят на подсветку синтаксиса. Даже это запутывается!

2
ответ дан lc. 29 November 2019 в 00:37
поделиться

Да, существует. Необходимо использовать зарезервированные слова от будущего. Как то, что произошло с различными названными методами, утверждают () в пред1.4 кодах.

Hope это помогает!

4
ответ дан Yoni Roit 29 November 2019 в 00:37
поделиться

Нет, Вы не можете сделать этого. Для получения дополнительной информации перейдите в Разделы JLS 3.8, 3.9

, следующие последовательности символов, сформированные из букв ASCII, резервируются для использования в качестве ключевых слов и не могут использоваться в качестве идентификаторов (В§3.8):

Keyword: one of
        abstract    continue    for           new          switch
        assert      default     if            package      synchronized
        boolean     do          goto          private      this
        break       double      implements    protected    throw
        byte        else        import        public       throws
        case        enum        instanceof    return       transient
        catch       extends     int           short        try
        char        final       interface     static       void 
        class       finally     long          strictfp     volatile
        const       float       native        super        while
6
ответ дан bruno conde 29 November 2019 в 00:37
поделиться

Строго говоря Вы не можете, если Вы не достаете ошибочную реализацию компилятора, которая не придерживается спецификации языка Java.

, Но где существует желание, существует путь. Копия следующий код в Ваш IDE, переключите кодирование исходного файла на UTF-16, и здесь мы идем:

public class HelloWorld {

    public static void main(String[] args) {

        HelloWorld.nеw();
    }

    public static void nеw () {
        System.out.println("Hello,World");
    }

}

Этот код является правильно построенным и допустимым классом Java. Однако, поскольку Вы предположили, что существует немного приема: символ 'Рµ' в "новом" идентификаторе не принадлежит набору символов ASCII, это - на самом деле cyrrilic 'Рµ' (prounanced 'ВЫ').

Текущая спецификация языка Java явно разрешает, и это важный момент для создания, использование Unicode для именования идентификаторов. Это означает, что у каждого есть способность свободно позвонить ей или его классам на французском, Chinise или русском языке, если они желают. Это также возможно к смешиванию и подгонке алфавиты в коде. И исторически, некоторые буквы в латинском и других алфавитах являются двойниками.

В результате: нет, Вы не можете использовать зарезервированные слова в качестве идентификаторов, но можно использовать идентификаторы, которые точно походят на зарезервированные слова.

, Должен ли кто-либо делать, это - полностью другой разговор.

9
ответ дан Vlad Gudim 29 November 2019 в 00:37
поделиться

Чаще всего эта проблема предстает перед "классом", в этом случае это обычно для записи "clazz".

11
ответ дан starblue 29 November 2019 в 00:37
поделиться

Это - допустимый вопрос. Такая вещь возможна на других языках. В C# снабдите префиксом идентификатор @ (, как спросили прежде ); в Дельфи, префиксе с &. Но Java не предлагает такой функции (частично, потому что он не должен действительно взаимодействовать с идентификаторами, определенными другими языками путем.Net мир делает).

38
ответ дан Community 29 November 2019 в 00:37
поделиться

Ха? Почему Вы хотели бы сделать это? Можно записать им в l33t, который одурачит компилятор.

class cl4ss {
  String r3turn() {
    return "but why?";
  }
}
3
ответ дан Miserable Variable 29 November 2019 в 00:37
поделиться

PL / 1 (язык программирования мэйнфреймов IBM 1960-х годов, который существует и по сей день), как известно, требовал, чтобы, хотя некоторые слова действовали как ключевые слова в определенных контекстах, все слова могли использоваться как идентификаторы. Это даже не так сложно сделать в парсере, если вы намереваетесь быть последовательным в этом. PL / 1 считался довольно большим языком, и комитет по языкам беспокоился, что многие программисты не выучат его полностью, а затем будут удивлены, когда попытаются использовать ключевое слово из части, которую они не знали в качестве идентификатора. . Таким образом, вы можете написать что-то вроде:

IF BEGIN=ELSE THEN CALL=3 ELSE CALL FOO(ENDIF) ENDIF

Как отмечали здесь другие, возможность делать это не является рекомендацией.

Разработчики Java решили, что количество ключевых слов в языке было скромным, и зарезервировали набор. Они даже зарезервировали «GOTO», что фактически недопустимо ни в одной реальной Java-программе.

2
ответ дан 29 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

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