Нет, нет способа. Вот почему они обозначены как «зарезервированные».
Не уверен, что вы пытаетесь сделать, но $ является допустимым символом в идентификаторах, поэтому вы могли бы сделать, скажем:
int $return = 5;
Это выглядит немного странно, но он работает.
Нет, вы не можете этого сделать. Для получения дополнительной информации перейдите к JLS Разделы 3.8, 3.9
Следующие последовательности символов, образованные из букв ASCII, зарезервированы для использования в качестве ключевых слов и не могут использоваться в качестве идентификаторов (§3.8):
blockquote>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
Это правильный вопрос. Такая вещь возможна на других языках. В C # префикс идентификатора с @
(, как задано перед ); в Delphi, префикс с &
. Но Java не предлагает такой функции (отчасти потому, что на самом деле не нужно взаимодействовать с идентификаторами, определенными другими языками, как это делает мир .Net).
PL / 1 (1960-е годы IBM по мейнфрейму программирования по-прежнему существует сегодня) довольно классно требовал, чтобы, хотя некоторые слова действуют как ключевые слова в определенных контекстах, все слова могут использоваться как идентификаторы. Это даже не так сложно сделать в синтаксическом анализаторе, если вы решите быть последовательным в этом. PL / 1 считался довольно большим langauge, и комитет langauge опасался, что многие программисты не узнают все это, а затем будут удивлены, когда они попытаются использовать ключевое слово из той части, которую они не знали как идентификатор , Таким образом, вы могли бы писать такие вещи, как:
IF BEGIN=ELSE THEN CALL=3 ELSE CALL FOO(ENDIF) ENDIF
. Как отметили другие, возможность сделать это не рекомендация.
Разработчики Java решили количество ключевых слов в langauge был скромным и зарезервировал набор. Они даже зарезервировали «GOTO», который фактически не разрешен ни в одной реальной программе Java.
В Scala вы можете использовать backticks. Например: myVarialbe.`class`
Достаточно плохо, что некоторые чувствительные к регистру языки допускают такие вещи, как:
class New;
class Something
{
New makeNew()
{
return new New();
}
}
Но почему бы вам когда-нибудь захотелось написать строку кода следующим образом:
class new;
class Something
{
bool if;
new makeNew()
{
return if ? new new() : null;
}
}
Просто взгляните на подсветку синтаксиса. Даже он запутывается!
clazz
oder klass
).
– Konrad Rudolph
14 January 2009 в 21:31
default
. Это работает отлично, потому что default
не является зарезервированным словом в Scala. Это, однако, зарезервированное слово на Java, поэтому вы не можете вызвать этот метод с Java, хотя у вас есть совершенно законные основания для этого.
– Jörg W Mittag
25 August 2015 в 22:11
А? Почему вы хотите это сделать? Вы можете записать их в l33t, что приведет к обману компилятора.
class cl4ss {
String r3turn() {
return "but why?";
}
}
Невозможно использовать зарезервированные слова с компилятором javac.
Технически вы можете редактировать имена внутри файла класса после их компиляции, чтобы быть тем, что вы хотите: на этом этапе виртуальная машина не работает Не волнуйтесь, потому что он больше не имеет отношения к исходному коду. Я считаю, что некоторые обфускаторы используют эту технику.
Я знаю, что это старый вопрос, может помочь кому-то.
Возможно, используя GSON поддержку присвоения имен в поле
, например
@SerializedName("new")
private String New;
public String getNew ()
{
return New;
}
public void setNew (String aNew)
{
New = aNew;
}
Чаще всего эта проблема возникает для «класса», в этом случае принято писать «clazz».
Строго говоря, вы не можете, если только не попадете в сложную реализацию компилятора, которая не соответствует спецификации языка 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, это на самом деле циррологическое «е» (prounanced «YE»).
Текущая спецификация языка Java явно разрешает, и это важно для использования, использование Unicode для именования идентификаторов. Это означает, что у него есть возможность свободно называть ее или его занятия по-французски, по-китайски или по-русски, если они того пожелают. Также возможно смешивать и сопоставлять алфавиты в коде. И исторически некоторые буквы в латинском и других алфавитах выглядят привлекательно.
В результате: нет, вы не можете использовать зарезервированные слова в качестве идентификаторов, но вы можете использовать идентификаторы, которые выглядят точно так же, как зарезервированные слова.
Должен ли кто-нибудь делать это совсем другое дело.
Да, есть. Вы должны использовать зарезервированные слова из будущего. Как и с другими методами, называемыми assert () в коде pre-1.4.
Надеюсь, что это поможет!