Reserved words as variable or method names
Is there any tricky way to use Java reserved words as variable or method names?
java naming reserved-words
add a comment |
Is there any tricky way to use Java reserved words as variable or method names?
java naming reserved-words
4
just don't do it
– inspite
Jan 8 '09 at 11:49
5
It's not so strange, that he want do that. That's why C# has @ prefix, and Delphi has & and variable or method named eg. @if is legal in C#.
– prostynick
Sep 3 '10 at 8:04
5
I don't get all the "don't do it" comments. It is perfectly legitimate to call APIs from Java that weren't themselves written in Java, and there are identifiers which are perfectly legal in JVM byte code which aren't legal in Java. That's precisely why languages like C# (@class
), Scala (`class`
) and others have escaping mechanisms. There are 500 languages on the JVM, if I tried to take every single reserved word from every single one of those 500 languages into account when designing APIs, I'd go insane (and someone might invent a new language with a new reserved word later anyway).
– Jörg W Mittag
Aug 25 '15 at 22:05
add a comment |
Is there any tricky way to use Java reserved words as variable or method names?
java naming reserved-words
Is there any tricky way to use Java reserved words as variable or method names?
java naming reserved-words
java naming reserved-words
edited Jan 14 '09 at 20:23
Vlad Gudim
16.7k146391
16.7k146391
asked Jan 8 '09 at 11:47
4
just don't do it
– inspite
Jan 8 '09 at 11:49
5
It's not so strange, that he want do that. That's why C# has @ prefix, and Delphi has & and variable or method named eg. @if is legal in C#.
– prostynick
Sep 3 '10 at 8:04
5
I don't get all the "don't do it" comments. It is perfectly legitimate to call APIs from Java that weren't themselves written in Java, and there are identifiers which are perfectly legal in JVM byte code which aren't legal in Java. That's precisely why languages like C# (@class
), Scala (`class`
) and others have escaping mechanisms. There are 500 languages on the JVM, if I tried to take every single reserved word from every single one of those 500 languages into account when designing APIs, I'd go insane (and someone might invent a new language with a new reserved word later anyway).
– Jörg W Mittag
Aug 25 '15 at 22:05
add a comment |
4
just don't do it
– inspite
Jan 8 '09 at 11:49
5
It's not so strange, that he want do that. That's why C# has @ prefix, and Delphi has & and variable or method named eg. @if is legal in C#.
– prostynick
Sep 3 '10 at 8:04
5
I don't get all the "don't do it" comments. It is perfectly legitimate to call APIs from Java that weren't themselves written in Java, and there are identifiers which are perfectly legal in JVM byte code which aren't legal in Java. That's precisely why languages like C# (@class
), Scala (`class`
) and others have escaping mechanisms. There are 500 languages on the JVM, if I tried to take every single reserved word from every single one of those 500 languages into account when designing APIs, I'd go insane (and someone might invent a new language with a new reserved word later anyway).
– Jörg W Mittag
Aug 25 '15 at 22:05
4
4
just don't do it
– inspite
Jan 8 '09 at 11:49
just don't do it
– inspite
Jan 8 '09 at 11:49
5
5
It's not so strange, that he want do that. That's why C# has @ prefix, and Delphi has & and variable or method named eg. @if is legal in C#.
– prostynick
Sep 3 '10 at 8:04
It's not so strange, that he want do that. That's why C# has @ prefix, and Delphi has & and variable or method named eg. @if is legal in C#.
– prostynick
Sep 3 '10 at 8:04
5
5
I don't get all the "don't do it" comments. It is perfectly legitimate to call APIs from Java that weren't themselves written in Java, and there are identifiers which are perfectly legal in JVM byte code which aren't legal in Java. That's precisely why languages like C# (
@class
), Scala (`class`
) and others have escaping mechanisms. There are 500 languages on the JVM, if I tried to take every single reserved word from every single one of those 500 languages into account when designing APIs, I'd go insane (and someone might invent a new language with a new reserved word later anyway).– Jörg W Mittag
Aug 25 '15 at 22:05
I don't get all the "don't do it" comments. It is perfectly legitimate to call APIs from Java that weren't themselves written in Java, and there are identifiers which are perfectly legal in JVM byte code which aren't legal in Java. That's precisely why languages like C# (
@class
), Scala (`class`
) and others have escaping mechanisms. There are 500 languages on the JVM, if I tried to take every single reserved word from every single one of those 500 languages into account when designing APIs, I'd go insane (and someone might invent a new language with a new reserved word later anyway).– Jörg W Mittag
Aug 25 '15 at 22:05
add a comment |
14 Answers
14
active
oldest
votes
No, there is no way. That's why they're labeled "reserved".
3
Adding a " _ " in front of a reserved keyword like "_new" is the closest thing you'll get.
– NoName
Nov 3 '17 at 1:27
add a comment |
This is a valid question. Such a thing is possible in other languages. In C#, prefix the identifier with @
(as asked before); in Delphi, prefix with &
. But Java offers no such feature (partly because it doesn't really need to interact with identifiers defined by other languages the way the .Net world does).
Well, if you are willing to accept the C# hack, you can prefix Java names with ZZZ or any other character sequence that you won't otherwise use as a prefix.
– Ira Baxter
Nov 8 '09 at 20:55
8
But Ira, that changes the identifier. The C# and Delphi ways escape the original name, but it's still the same name. In Delphi, you can even write the fully qualified name without the escape character.
– Rob Kennedy
Nov 8 '09 at 21:01
1
This becomes especially visible in Xml or JSON serialization as the serialized text would have ZZZ as part of the tag name <ZZZstring></ZZZstring>, whereas in C#, @string would serialize to <string></string>.
– Rhyous
Mar 31 '16 at 22:21
add a comment |
Most often this issue comes up for "class", in this case it is customary to write "clazz".
4
Is there a best practices alternatives list for all keywords?
– Ciro Santilli 新疆改造中心 六四事件 法轮功
Apr 9 '15 at 9:23
add a comment |
No, you can't do this. For more information please go to JLS Sections 3.8, 3.9
The following character sequences,
formed from ASCII letters, are
reserved for use as keywords and
cannot be used as identifiers (§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
2
shame about super
– inspite
Jan 8 '09 at 12:07
add a comment |
Strictly speaking you can't, unless you get your hands on a buggy compiler implementation that doesn't adhere to the Java language spec.
But where there's a will, there's a way. Copy the following code into your IDE, switch the source file encoding to UTF-16 and here we go:
public class HelloWorld {
public static void main(String args) {
HelloWorld.nеw();
}
public static void nеw () {
System.out.println("Hello,World");
}
}
This code is a well-formed and valid Java class. However, as you have guessed there is a little trick: the 'е' character within "new" identifier does not belong to the ASCII character set, it is actually a cyrrilic 'е' (prounanced 'YE').
Current Java language spec explicitly permits, and this an important point to make, the use of Unicode for naming identifiers. That means that one has an ability to freely call her or his classes in French, Chinise or Russian if they wish. It is also possible to mix and match the alphabets within code. And historically, some letters within Latin and other alphabets are lookalikes.
As a result: no, you can't use the reserved words as identifiers, but you can use identifiers that look exactly like reserved words.
Whether anyone should be doing it is a totally different matter.
2
Down voted because these kinds of tricks can lead to bugs and behavior that is not easily understood. Why not name it 'n3w' or anything else as it is intended to change the behavior.
– CodeMonkeyKing
Jul 13 '15 at 23:14
1
@CodeMonkeyKing, unfortunately not everyone and not in every scenario follows best naming conventions and it is entirely possible that someone might come across a piece of code that included an identifier looking exactly as a reserved word and, perplexingly, compiled without errors. This answer would come to the rescue then. Besides it is answering the actual question being asked. "Whether anyone should be doing it is a totally different matter."
– Vlad Gudim
Aug 4 '15 at 13:48
3
If I parse the OP's question exactly the answer you suggest only appears to the human eye to be a keyword and is not a "tricky way to use a Java reserved word". I would say from experience that these are the most difficult bugs to find. The real answer to this question is that reserved keywords are in fact reserved.
– CodeMonkeyKing
Aug 4 '15 at 18:04
1
I feel like this answer deserves a "Don't try this at home (or in the workplace)" label.
– Chris Kerekes
May 26 '17 at 17:42
add a comment |
Yes, there is.
You have to use reserved words from the future.
Like what happened with different methods called assert() in pre-1.4 code.
Hope it helps!
add a comment |
Huh? Why would you want to do that? You can write them in l33t, that will fool the compiler.
class cl4ss {
String r3turn() {
return "but why?";
}
}
3
Technically - you never fool the compiler as the above example is completely legal Java.
– CodeMonkeyKing
Aug 4 '15 at 18:11
add a comment |
I know it's old question still, might help someone.
It's possible by using GSON's Field Naming Support
eg.
@SerializedName("new")
private String New;
public String getNew ()
{
return New;
}
public void setNew (String aNew)
{
New = aNew;
}
1
It helped me, thanks
– Jake Gaston
Mar 2 '18 at 16:21
Glad to be of help @jake gaston It's workaround i needed at one Project which already had defined variables which couldn't be changed.
– SK16
Mar 3 '18 at 6:39
add a comment |
It's bad enough some case-sensitive languages allow things like the following:
class New;
class Something
{
New makeNew()
{
return new New();
}
}
But why would you ever want to be able to write a line of code like this:
class new;
class Something
{
bool if;
new makeNew()
{
return if ? new new() : null;
}
}
Just take a look at the syntax highlighting. Even it gets confused!
4
You can ridicule any feature by understanding its potential applications wrong or by giving bad examples. That doesn't imply that better uses don't exist. Sometimes, a reserved word in indeed the most natural name (as is often the case when the identifierclazz
oderklass
is used).
– Konrad Rudolph
Jan 14 '09 at 20:31
I don't think what I supposed was a 'bad example'. A bit over the top, yes, but not bad. Maybe the most natural name is a reserved word, is it good to use that name? Reserved words are reserved for a reason. It's easy to distinguish 'class' and 'clazz'. Can you distinguish 'class' and 'class'?
– lc.
Jan 15 '09 at 7:00
3
But not all languages agree what the reserved words are. In Scala, it is perfectly natural, to name a method that returns the default valuedefault
. This works perfectly fine, becausedefault
is not a reserved word in Scala. It is, however, a reserved word in Java, thus, you cannot call this method from Java, even though you have perfectly legitimate reason to do so.
– Jörg W Mittag
Aug 25 '15 at 22:11
add a comment |
There is no way to use reserved words with the javac compiler.
Technically, you can edit the names inside the class file once it's compiled to be anything you want: at that stage, the VM doesn't care, because it's not dealing with source code any more. I believe some obfuscators use this technique.
add a comment |
PL/1 (a 1960's IBM mainframe programming language still around today) rather famously required that while some words act like keywords in certain contexts, all words can be used as identifiers. This isn't even that hard to do in a parser if you set out to be consistent about it. PL/1 was considered to a rather big langauge, and the langauge committee worried that many programmers wouldn't learn all of it, and then would get suprised when they tried to use the keyword from a part they didn't know as an identifier.
So you could write things like:
IF BEGIN=ELSE THEN CALL=3 ELSE CALL FOO(ENDIF) ENDIF
As others have noted here, the ability to do this isn't a recommendation.
The Java designers decided the number of keywords in the langauge was modest, and reserved the set. They even reserved 'GOTO', which isn't actually allowed in any real Java program.
add a comment |
Not sure what you're trying to do, but $ is a valid character in identifiers, so you could do, say:
int $return = 5;
It looks a little weird, but it does work.
1
This is similar to @identifier in C#, although it doesn't end in the same result (in C# the '@' does not become part of the identifier)
– Hosam Aly
Jan 24 '09 at 8:38
add a comment |
In Scala you can use backticks. For example: myVarialbe.`class`
add a comment |
If you really need to use a field/local variable/method named the same as a reserved word, I suggest appending an underscore at the end of the name:
// JPA entity mapping class:
private Boolean void_;
public Boolean getVoid_() { ... }
void setVoid_(Boolean void_) { ... }
It is a more readable choice (IMHO) than appending chars at the beginning of the name (fVoid, aVoid, vVoid, etc.)
The code above is a real world case that happened to me, working with a legacy database, in which the invoice
table had a field named void
indicating whether the document had been voided or not.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f423994%2freserved-words-as-variable-or-method-names%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
14 Answers
14
active
oldest
votes
14 Answers
14
active
oldest
votes
active
oldest
votes
active
oldest
votes
No, there is no way. That's why they're labeled "reserved".
3
Adding a " _ " in front of a reserved keyword like "_new" is the closest thing you'll get.
– NoName
Nov 3 '17 at 1:27
add a comment |
No, there is no way. That's why they're labeled "reserved".
3
Adding a " _ " in front of a reserved keyword like "_new" is the closest thing you'll get.
– NoName
Nov 3 '17 at 1:27
add a comment |
No, there is no way. That's why they're labeled "reserved".
No, there is no way. That's why they're labeled "reserved".
answered Jan 8 '09 at 11:49
SaltySalty
5,70432829
5,70432829
3
Adding a " _ " in front of a reserved keyword like "_new" is the closest thing you'll get.
– NoName
Nov 3 '17 at 1:27
add a comment |
3
Adding a " _ " in front of a reserved keyword like "_new" is the closest thing you'll get.
– NoName
Nov 3 '17 at 1:27
3
3
Adding a " _ " in front of a reserved keyword like "_new" is the closest thing you'll get.
– NoName
Nov 3 '17 at 1:27
Adding a " _ " in front of a reserved keyword like "_new" is the closest thing you'll get.
– NoName
Nov 3 '17 at 1:27
add a comment |
This is a valid question. Such a thing is possible in other languages. In C#, prefix the identifier with @
(as asked before); in Delphi, prefix with &
. But Java offers no such feature (partly because it doesn't really need to interact with identifiers defined by other languages the way the .Net world does).
Well, if you are willing to accept the C# hack, you can prefix Java names with ZZZ or any other character sequence that you won't otherwise use as a prefix.
– Ira Baxter
Nov 8 '09 at 20:55
8
But Ira, that changes the identifier. The C# and Delphi ways escape the original name, but it's still the same name. In Delphi, you can even write the fully qualified name without the escape character.
– Rob Kennedy
Nov 8 '09 at 21:01
1
This becomes especially visible in Xml or JSON serialization as the serialized text would have ZZZ as part of the tag name <ZZZstring></ZZZstring>, whereas in C#, @string would serialize to <string></string>.
– Rhyous
Mar 31 '16 at 22:21
add a comment |
This is a valid question. Such a thing is possible in other languages. In C#, prefix the identifier with @
(as asked before); in Delphi, prefix with &
. But Java offers no such feature (partly because it doesn't really need to interact with identifiers defined by other languages the way the .Net world does).
Well, if you are willing to accept the C# hack, you can prefix Java names with ZZZ or any other character sequence that you won't otherwise use as a prefix.
– Ira Baxter
Nov 8 '09 at 20:55
8
But Ira, that changes the identifier. The C# and Delphi ways escape the original name, but it's still the same name. In Delphi, you can even write the fully qualified name without the escape character.
– Rob Kennedy
Nov 8 '09 at 21:01
1
This becomes especially visible in Xml or JSON serialization as the serialized text would have ZZZ as part of the tag name <ZZZstring></ZZZstring>, whereas in C#, @string would serialize to <string></string>.
– Rhyous
Mar 31 '16 at 22:21
add a comment |
This is a valid question. Such a thing is possible in other languages. In C#, prefix the identifier with @
(as asked before); in Delphi, prefix with &
. But Java offers no such feature (partly because it doesn't really need to interact with identifiers defined by other languages the way the .Net world does).
This is a valid question. Such a thing is possible in other languages. In C#, prefix the identifier with @
(as asked before); in Delphi, prefix with &
. But Java offers no such feature (partly because it doesn't really need to interact with identifiers defined by other languages the way the .Net world does).
edited May 23 '17 at 11:47
Community♦
11
11
answered Jan 8 '09 at 12:48
Rob KennedyRob Kennedy
145k16230407
145k16230407
Well, if you are willing to accept the C# hack, you can prefix Java names with ZZZ or any other character sequence that you won't otherwise use as a prefix.
– Ira Baxter
Nov 8 '09 at 20:55
8
But Ira, that changes the identifier. The C# and Delphi ways escape the original name, but it's still the same name. In Delphi, you can even write the fully qualified name without the escape character.
– Rob Kennedy
Nov 8 '09 at 21:01
1
This becomes especially visible in Xml or JSON serialization as the serialized text would have ZZZ as part of the tag name <ZZZstring></ZZZstring>, whereas in C#, @string would serialize to <string></string>.
– Rhyous
Mar 31 '16 at 22:21
add a comment |
Well, if you are willing to accept the C# hack, you can prefix Java names with ZZZ or any other character sequence that you won't otherwise use as a prefix.
– Ira Baxter
Nov 8 '09 at 20:55
8
But Ira, that changes the identifier. The C# and Delphi ways escape the original name, but it's still the same name. In Delphi, you can even write the fully qualified name without the escape character.
– Rob Kennedy
Nov 8 '09 at 21:01
1
This becomes especially visible in Xml or JSON serialization as the serialized text would have ZZZ as part of the tag name <ZZZstring></ZZZstring>, whereas in C#, @string would serialize to <string></string>.
– Rhyous
Mar 31 '16 at 22:21
Well, if you are willing to accept the C# hack, you can prefix Java names with ZZZ or any other character sequence that you won't otherwise use as a prefix.
– Ira Baxter
Nov 8 '09 at 20:55
Well, if you are willing to accept the C# hack, you can prefix Java names with ZZZ or any other character sequence that you won't otherwise use as a prefix.
– Ira Baxter
Nov 8 '09 at 20:55
8
8
But Ira, that changes the identifier. The C# and Delphi ways escape the original name, but it's still the same name. In Delphi, you can even write the fully qualified name without the escape character.
– Rob Kennedy
Nov 8 '09 at 21:01
But Ira, that changes the identifier. The C# and Delphi ways escape the original name, but it's still the same name. In Delphi, you can even write the fully qualified name without the escape character.
– Rob Kennedy
Nov 8 '09 at 21:01
1
1
This becomes especially visible in Xml or JSON serialization as the serialized text would have ZZZ as part of the tag name <ZZZstring></ZZZstring>, whereas in C#, @string would serialize to <string></string>.
– Rhyous
Mar 31 '16 at 22:21
This becomes especially visible in Xml or JSON serialization as the serialized text would have ZZZ as part of the tag name <ZZZstring></ZZZstring>, whereas in C#, @string would serialize to <string></string>.
– Rhyous
Mar 31 '16 at 22:21
add a comment |
Most often this issue comes up for "class", in this case it is customary to write "clazz".
4
Is there a best practices alternatives list for all keywords?
– Ciro Santilli 新疆改造中心 六四事件 法轮功
Apr 9 '15 at 9:23
add a comment |
Most often this issue comes up for "class", in this case it is customary to write "clazz".
4
Is there a best practices alternatives list for all keywords?
– Ciro Santilli 新疆改造中心 六四事件 法轮功
Apr 9 '15 at 9:23
add a comment |
Most often this issue comes up for "class", in this case it is customary to write "clazz".
Most often this issue comes up for "class", in this case it is customary to write "clazz".
answered Jan 8 '09 at 11:54
starbluestarblue
44.9k1176136
44.9k1176136
4
Is there a best practices alternatives list for all keywords?
– Ciro Santilli 新疆改造中心 六四事件 法轮功
Apr 9 '15 at 9:23
add a comment |
4
Is there a best practices alternatives list for all keywords?
– Ciro Santilli 新疆改造中心 六四事件 法轮功
Apr 9 '15 at 9:23
4
4
Is there a best practices alternatives list for all keywords?
– Ciro Santilli 新疆改造中心 六四事件 法轮功
Apr 9 '15 at 9:23
Is there a best practices alternatives list for all keywords?
– Ciro Santilli 新疆改造中心 六四事件 法轮功
Apr 9 '15 at 9:23
add a comment |
No, you can't do this. For more information please go to JLS Sections 3.8, 3.9
The following character sequences,
formed from ASCII letters, are
reserved for use as keywords and
cannot be used as identifiers (§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
2
shame about super
– inspite
Jan 8 '09 at 12:07
add a comment |
No, you can't do this. For more information please go to JLS Sections 3.8, 3.9
The following character sequences,
formed from ASCII letters, are
reserved for use as keywords and
cannot be used as identifiers (§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
2
shame about super
– inspite
Jan 8 '09 at 12:07
add a comment |
No, you can't do this. For more information please go to JLS Sections 3.8, 3.9
The following character sequences,
formed from ASCII letters, are
reserved for use as keywords and
cannot be used as identifiers (§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
No, you can't do this. For more information please go to JLS Sections 3.8, 3.9
The following character sequences,
formed from ASCII letters, are
reserved for use as keywords and
cannot be used as identifiers (§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
answered Jan 8 '09 at 11:56
bruno condebruno conde
42.2k1088109
42.2k1088109
2
shame about super
– inspite
Jan 8 '09 at 12:07
add a comment |
2
shame about super
– inspite
Jan 8 '09 at 12:07
2
2
shame about super
– inspite
Jan 8 '09 at 12:07
shame about super
– inspite
Jan 8 '09 at 12:07
add a comment |
Strictly speaking you can't, unless you get your hands on a buggy compiler implementation that doesn't adhere to the Java language spec.
But where there's a will, there's a way. Copy the following code into your IDE, switch the source file encoding to UTF-16 and here we go:
public class HelloWorld {
public static void main(String args) {
HelloWorld.nеw();
}
public static void nеw () {
System.out.println("Hello,World");
}
}
This code is a well-formed and valid Java class. However, as you have guessed there is a little trick: the 'е' character within "new" identifier does not belong to the ASCII character set, it is actually a cyrrilic 'е' (prounanced 'YE').
Current Java language spec explicitly permits, and this an important point to make, the use of Unicode for naming identifiers. That means that one has an ability to freely call her or his classes in French, Chinise or Russian if they wish. It is also possible to mix and match the alphabets within code. And historically, some letters within Latin and other alphabets are lookalikes.
As a result: no, you can't use the reserved words as identifiers, but you can use identifiers that look exactly like reserved words.
Whether anyone should be doing it is a totally different matter.
2
Down voted because these kinds of tricks can lead to bugs and behavior that is not easily understood. Why not name it 'n3w' or anything else as it is intended to change the behavior.
– CodeMonkeyKing
Jul 13 '15 at 23:14
1
@CodeMonkeyKing, unfortunately not everyone and not in every scenario follows best naming conventions and it is entirely possible that someone might come across a piece of code that included an identifier looking exactly as a reserved word and, perplexingly, compiled without errors. This answer would come to the rescue then. Besides it is answering the actual question being asked. "Whether anyone should be doing it is a totally different matter."
– Vlad Gudim
Aug 4 '15 at 13:48
3
If I parse the OP's question exactly the answer you suggest only appears to the human eye to be a keyword and is not a "tricky way to use a Java reserved word". I would say from experience that these are the most difficult bugs to find. The real answer to this question is that reserved keywords are in fact reserved.
– CodeMonkeyKing
Aug 4 '15 at 18:04
1
I feel like this answer deserves a "Don't try this at home (or in the workplace)" label.
– Chris Kerekes
May 26 '17 at 17:42
add a comment |
Strictly speaking you can't, unless you get your hands on a buggy compiler implementation that doesn't adhere to the Java language spec.
But where there's a will, there's a way. Copy the following code into your IDE, switch the source file encoding to UTF-16 and here we go:
public class HelloWorld {
public static void main(String args) {
HelloWorld.nеw();
}
public static void nеw () {
System.out.println("Hello,World");
}
}
This code is a well-formed and valid Java class. However, as you have guessed there is a little trick: the 'е' character within "new" identifier does not belong to the ASCII character set, it is actually a cyrrilic 'е' (prounanced 'YE').
Current Java language spec explicitly permits, and this an important point to make, the use of Unicode for naming identifiers. That means that one has an ability to freely call her or his classes in French, Chinise or Russian if they wish. It is also possible to mix and match the alphabets within code. And historically, some letters within Latin and other alphabets are lookalikes.
As a result: no, you can't use the reserved words as identifiers, but you can use identifiers that look exactly like reserved words.
Whether anyone should be doing it is a totally different matter.
2
Down voted because these kinds of tricks can lead to bugs and behavior that is not easily understood. Why not name it 'n3w' or anything else as it is intended to change the behavior.
– CodeMonkeyKing
Jul 13 '15 at 23:14
1
@CodeMonkeyKing, unfortunately not everyone and not in every scenario follows best naming conventions and it is entirely possible that someone might come across a piece of code that included an identifier looking exactly as a reserved word and, perplexingly, compiled without errors. This answer would come to the rescue then. Besides it is answering the actual question being asked. "Whether anyone should be doing it is a totally different matter."
– Vlad Gudim
Aug 4 '15 at 13:48
3
If I parse the OP's question exactly the answer you suggest only appears to the human eye to be a keyword and is not a "tricky way to use a Java reserved word". I would say from experience that these are the most difficult bugs to find. The real answer to this question is that reserved keywords are in fact reserved.
– CodeMonkeyKing
Aug 4 '15 at 18:04
1
I feel like this answer deserves a "Don't try this at home (or in the workplace)" label.
– Chris Kerekes
May 26 '17 at 17:42
add a comment |
Strictly speaking you can't, unless you get your hands on a buggy compiler implementation that doesn't adhere to the Java language spec.
But where there's a will, there's a way. Copy the following code into your IDE, switch the source file encoding to UTF-16 and here we go:
public class HelloWorld {
public static void main(String args) {
HelloWorld.nеw();
}
public static void nеw () {
System.out.println("Hello,World");
}
}
This code is a well-formed and valid Java class. However, as you have guessed there is a little trick: the 'е' character within "new" identifier does not belong to the ASCII character set, it is actually a cyrrilic 'е' (prounanced 'YE').
Current Java language spec explicitly permits, and this an important point to make, the use of Unicode for naming identifiers. That means that one has an ability to freely call her or his classes in French, Chinise or Russian if they wish. It is also possible to mix and match the alphabets within code. And historically, some letters within Latin and other alphabets are lookalikes.
As a result: no, you can't use the reserved words as identifiers, but you can use identifiers that look exactly like reserved words.
Whether anyone should be doing it is a totally different matter.
Strictly speaking you can't, unless you get your hands on a buggy compiler implementation that doesn't adhere to the Java language spec.
But where there's a will, there's a way. Copy the following code into your IDE, switch the source file encoding to UTF-16 and here we go:
public class HelloWorld {
public static void main(String args) {
HelloWorld.nеw();
}
public static void nеw () {
System.out.println("Hello,World");
}
}
This code is a well-formed and valid Java class. However, as you have guessed there is a little trick: the 'е' character within "new" identifier does not belong to the ASCII character set, it is actually a cyrrilic 'е' (prounanced 'YE').
Current Java language spec explicitly permits, and this an important point to make, the use of Unicode for naming identifiers. That means that one has an ability to freely call her or his classes in French, Chinise or Russian if they wish. It is also possible to mix and match the alphabets within code. And historically, some letters within Latin and other alphabets are lookalikes.
As a result: no, you can't use the reserved words as identifiers, but you can use identifiers that look exactly like reserved words.
Whether anyone should be doing it is a totally different matter.
edited Jan 14 '09 at 20:24
answered Jan 14 '09 at 20:18
Vlad GudimVlad Gudim
16.7k146391
16.7k146391
2
Down voted because these kinds of tricks can lead to bugs and behavior that is not easily understood. Why not name it 'n3w' or anything else as it is intended to change the behavior.
– CodeMonkeyKing
Jul 13 '15 at 23:14
1
@CodeMonkeyKing, unfortunately not everyone and not in every scenario follows best naming conventions and it is entirely possible that someone might come across a piece of code that included an identifier looking exactly as a reserved word and, perplexingly, compiled without errors. This answer would come to the rescue then. Besides it is answering the actual question being asked. "Whether anyone should be doing it is a totally different matter."
– Vlad Gudim
Aug 4 '15 at 13:48
3
If I parse the OP's question exactly the answer you suggest only appears to the human eye to be a keyword and is not a "tricky way to use a Java reserved word". I would say from experience that these are the most difficult bugs to find. The real answer to this question is that reserved keywords are in fact reserved.
– CodeMonkeyKing
Aug 4 '15 at 18:04
1
I feel like this answer deserves a "Don't try this at home (or in the workplace)" label.
– Chris Kerekes
May 26 '17 at 17:42
add a comment |
2
Down voted because these kinds of tricks can lead to bugs and behavior that is not easily understood. Why not name it 'n3w' or anything else as it is intended to change the behavior.
– CodeMonkeyKing
Jul 13 '15 at 23:14
1
@CodeMonkeyKing, unfortunately not everyone and not in every scenario follows best naming conventions and it is entirely possible that someone might come across a piece of code that included an identifier looking exactly as a reserved word and, perplexingly, compiled without errors. This answer would come to the rescue then. Besides it is answering the actual question being asked. "Whether anyone should be doing it is a totally different matter."
– Vlad Gudim
Aug 4 '15 at 13:48
3
If I parse the OP's question exactly the answer you suggest only appears to the human eye to be a keyword and is not a "tricky way to use a Java reserved word". I would say from experience that these are the most difficult bugs to find. The real answer to this question is that reserved keywords are in fact reserved.
– CodeMonkeyKing
Aug 4 '15 at 18:04
1
I feel like this answer deserves a "Don't try this at home (or in the workplace)" label.
– Chris Kerekes
May 26 '17 at 17:42
2
2
Down voted because these kinds of tricks can lead to bugs and behavior that is not easily understood. Why not name it 'n3w' or anything else as it is intended to change the behavior.
– CodeMonkeyKing
Jul 13 '15 at 23:14
Down voted because these kinds of tricks can lead to bugs and behavior that is not easily understood. Why not name it 'n3w' or anything else as it is intended to change the behavior.
– CodeMonkeyKing
Jul 13 '15 at 23:14
1
1
@CodeMonkeyKing, unfortunately not everyone and not in every scenario follows best naming conventions and it is entirely possible that someone might come across a piece of code that included an identifier looking exactly as a reserved word and, perplexingly, compiled without errors. This answer would come to the rescue then. Besides it is answering the actual question being asked. "Whether anyone should be doing it is a totally different matter."
– Vlad Gudim
Aug 4 '15 at 13:48
@CodeMonkeyKing, unfortunately not everyone and not in every scenario follows best naming conventions and it is entirely possible that someone might come across a piece of code that included an identifier looking exactly as a reserved word and, perplexingly, compiled without errors. This answer would come to the rescue then. Besides it is answering the actual question being asked. "Whether anyone should be doing it is a totally different matter."
– Vlad Gudim
Aug 4 '15 at 13:48
3
3
If I parse the OP's question exactly the answer you suggest only appears to the human eye to be a keyword and is not a "tricky way to use a Java reserved word". I would say from experience that these are the most difficult bugs to find. The real answer to this question is that reserved keywords are in fact reserved.
– CodeMonkeyKing
Aug 4 '15 at 18:04
If I parse the OP's question exactly the answer you suggest only appears to the human eye to be a keyword and is not a "tricky way to use a Java reserved word". I would say from experience that these are the most difficult bugs to find. The real answer to this question is that reserved keywords are in fact reserved.
– CodeMonkeyKing
Aug 4 '15 at 18:04
1
1
I feel like this answer deserves a "Don't try this at home (or in the workplace)" label.
– Chris Kerekes
May 26 '17 at 17:42
I feel like this answer deserves a "Don't try this at home (or in the workplace)" label.
– Chris Kerekes
May 26 '17 at 17:42
add a comment |
Yes, there is.
You have to use reserved words from the future.
Like what happened with different methods called assert() in pre-1.4 code.
Hope it helps!
add a comment |
Yes, there is.
You have to use reserved words from the future.
Like what happened with different methods called assert() in pre-1.4 code.
Hope it helps!
add a comment |
Yes, there is.
You have to use reserved words from the future.
Like what happened with different methods called assert() in pre-1.4 code.
Hope it helps!
Yes, there is.
You have to use reserved words from the future.
Like what happened with different methods called assert() in pre-1.4 code.
Hope it helps!
answered Jan 8 '09 at 11:59
Yoni RoitYoni Roit
21.9k52930
21.9k52930
add a comment |
add a comment |
Huh? Why would you want to do that? You can write them in l33t, that will fool the compiler.
class cl4ss {
String r3turn() {
return "but why?";
}
}
3
Technically - you never fool the compiler as the above example is completely legal Java.
– CodeMonkeyKing
Aug 4 '15 at 18:11
add a comment |
Huh? Why would you want to do that? You can write them in l33t, that will fool the compiler.
class cl4ss {
String r3turn() {
return "but why?";
}
}
3
Technically - you never fool the compiler as the above example is completely legal Java.
– CodeMonkeyKing
Aug 4 '15 at 18:11
add a comment |
Huh? Why would you want to do that? You can write them in l33t, that will fool the compiler.
class cl4ss {
String r3turn() {
return "but why?";
}
}
Huh? Why would you want to do that? You can write them in l33t, that will fool the compiler.
class cl4ss {
String r3turn() {
return "but why?";
}
}
answered Jan 8 '09 at 11:49
Miserable VariableMiserable Variable
23.4k1155107
23.4k1155107
3
Technically - you never fool the compiler as the above example is completely legal Java.
– CodeMonkeyKing
Aug 4 '15 at 18:11
add a comment |
3
Technically - you never fool the compiler as the above example is completely legal Java.
– CodeMonkeyKing
Aug 4 '15 at 18:11
3
3
Technically - you never fool the compiler as the above example is completely legal Java.
– CodeMonkeyKing
Aug 4 '15 at 18:11
Technically - you never fool the compiler as the above example is completely legal Java.
– CodeMonkeyKing
Aug 4 '15 at 18:11
add a comment |
I know it's old question still, might help someone.
It's possible by using GSON's Field Naming Support
eg.
@SerializedName("new")
private String New;
public String getNew ()
{
return New;
}
public void setNew (String aNew)
{
New = aNew;
}
1
It helped me, thanks
– Jake Gaston
Mar 2 '18 at 16:21
Glad to be of help @jake gaston It's workaround i needed at one Project which already had defined variables which couldn't be changed.
– SK16
Mar 3 '18 at 6:39
add a comment |
I know it's old question still, might help someone.
It's possible by using GSON's Field Naming Support
eg.
@SerializedName("new")
private String New;
public String getNew ()
{
return New;
}
public void setNew (String aNew)
{
New = aNew;
}
1
It helped me, thanks
– Jake Gaston
Mar 2 '18 at 16:21
Glad to be of help @jake gaston It's workaround i needed at one Project which already had defined variables which couldn't be changed.
– SK16
Mar 3 '18 at 6:39
add a comment |
I know it's old question still, might help someone.
It's possible by using GSON's Field Naming Support
eg.
@SerializedName("new")
private String New;
public String getNew ()
{
return New;
}
public void setNew (String aNew)
{
New = aNew;
}
I know it's old question still, might help someone.
It's possible by using GSON's Field Naming Support
eg.
@SerializedName("new")
private String New;
public String getNew ()
{
return New;
}
public void setNew (String aNew)
{
New = aNew;
}
edited May 11 '17 at 17:06
Remy Lebeau
336k18259453
336k18259453
answered Nov 25 '16 at 13:18
SK16SK16
428513
428513
1
It helped me, thanks
– Jake Gaston
Mar 2 '18 at 16:21
Glad to be of help @jake gaston It's workaround i needed at one Project which already had defined variables which couldn't be changed.
– SK16
Mar 3 '18 at 6:39
add a comment |
1
It helped me, thanks
– Jake Gaston
Mar 2 '18 at 16:21
Glad to be of help @jake gaston It's workaround i needed at one Project which already had defined variables which couldn't be changed.
– SK16
Mar 3 '18 at 6:39
1
1
It helped me, thanks
– Jake Gaston
Mar 2 '18 at 16:21
It helped me, thanks
– Jake Gaston
Mar 2 '18 at 16:21
Glad to be of help @jake gaston It's workaround i needed at one Project which already had defined variables which couldn't be changed.
– SK16
Mar 3 '18 at 6:39
Glad to be of help @jake gaston It's workaround i needed at one Project which already had defined variables which couldn't be changed.
– SK16
Mar 3 '18 at 6:39
add a comment |
It's bad enough some case-sensitive languages allow things like the following:
class New;
class Something
{
New makeNew()
{
return new New();
}
}
But why would you ever want to be able to write a line of code like this:
class new;
class Something
{
bool if;
new makeNew()
{
return if ? new new() : null;
}
}
Just take a look at the syntax highlighting. Even it gets confused!
4
You can ridicule any feature by understanding its potential applications wrong or by giving bad examples. That doesn't imply that better uses don't exist. Sometimes, a reserved word in indeed the most natural name (as is often the case when the identifierclazz
oderklass
is used).
– Konrad Rudolph
Jan 14 '09 at 20:31
I don't think what I supposed was a 'bad example'. A bit over the top, yes, but not bad. Maybe the most natural name is a reserved word, is it good to use that name? Reserved words are reserved for a reason. It's easy to distinguish 'class' and 'clazz'. Can you distinguish 'class' and 'class'?
– lc.
Jan 15 '09 at 7:00
3
But not all languages agree what the reserved words are. In Scala, it is perfectly natural, to name a method that returns the default valuedefault
. This works perfectly fine, becausedefault
is not a reserved word in Scala. It is, however, a reserved word in Java, thus, you cannot call this method from Java, even though you have perfectly legitimate reason to do so.
– Jörg W Mittag
Aug 25 '15 at 22:11
add a comment |
It's bad enough some case-sensitive languages allow things like the following:
class New;
class Something
{
New makeNew()
{
return new New();
}
}
But why would you ever want to be able to write a line of code like this:
class new;
class Something
{
bool if;
new makeNew()
{
return if ? new new() : null;
}
}
Just take a look at the syntax highlighting. Even it gets confused!
4
You can ridicule any feature by understanding its potential applications wrong or by giving bad examples. That doesn't imply that better uses don't exist. Sometimes, a reserved word in indeed the most natural name (as is often the case when the identifierclazz
oderklass
is used).
– Konrad Rudolph
Jan 14 '09 at 20:31
I don't think what I supposed was a 'bad example'. A bit over the top, yes, but not bad. Maybe the most natural name is a reserved word, is it good to use that name? Reserved words are reserved for a reason. It's easy to distinguish 'class' and 'clazz'. Can you distinguish 'class' and 'class'?
– lc.
Jan 15 '09 at 7:00
3
But not all languages agree what the reserved words are. In Scala, it is perfectly natural, to name a method that returns the default valuedefault
. This works perfectly fine, becausedefault
is not a reserved word in Scala. It is, however, a reserved word in Java, thus, you cannot call this method from Java, even though you have perfectly legitimate reason to do so.
– Jörg W Mittag
Aug 25 '15 at 22:11
add a comment |
It's bad enough some case-sensitive languages allow things like the following:
class New;
class Something
{
New makeNew()
{
return new New();
}
}
But why would you ever want to be able to write a line of code like this:
class new;
class Something
{
bool if;
new makeNew()
{
return if ? new new() : null;
}
}
Just take a look at the syntax highlighting. Even it gets confused!
It's bad enough some case-sensitive languages allow things like the following:
class New;
class Something
{
New makeNew()
{
return new New();
}
}
But why would you ever want to be able to write a line of code like this:
class new;
class Something
{
bool if;
new makeNew()
{
return if ? new new() : null;
}
}
Just take a look at the syntax highlighting. Even it gets confused!
answered Jan 8 '09 at 12:00
lc.lc.
89k19125155
89k19125155
4
You can ridicule any feature by understanding its potential applications wrong or by giving bad examples. That doesn't imply that better uses don't exist. Sometimes, a reserved word in indeed the most natural name (as is often the case when the identifierclazz
oderklass
is used).
– Konrad Rudolph
Jan 14 '09 at 20:31
I don't think what I supposed was a 'bad example'. A bit over the top, yes, but not bad. Maybe the most natural name is a reserved word, is it good to use that name? Reserved words are reserved for a reason. It's easy to distinguish 'class' and 'clazz'. Can you distinguish 'class' and 'class'?
– lc.
Jan 15 '09 at 7:00
3
But not all languages agree what the reserved words are. In Scala, it is perfectly natural, to name a method that returns the default valuedefault
. This works perfectly fine, becausedefault
is not a reserved word in Scala. It is, however, a reserved word in Java, thus, you cannot call this method from Java, even though you have perfectly legitimate reason to do so.
– Jörg W Mittag
Aug 25 '15 at 22:11
add a comment |
4
You can ridicule any feature by understanding its potential applications wrong or by giving bad examples. That doesn't imply that better uses don't exist. Sometimes, a reserved word in indeed the most natural name (as is often the case when the identifierclazz
oderklass
is used).
– Konrad Rudolph
Jan 14 '09 at 20:31
I don't think what I supposed was a 'bad example'. A bit over the top, yes, but not bad. Maybe the most natural name is a reserved word, is it good to use that name? Reserved words are reserved for a reason. It's easy to distinguish 'class' and 'clazz'. Can you distinguish 'class' and 'class'?
– lc.
Jan 15 '09 at 7:00
3
But not all languages agree what the reserved words are. In Scala, it is perfectly natural, to name a method that returns the default valuedefault
. This works perfectly fine, becausedefault
is not a reserved word in Scala. It is, however, a reserved word in Java, thus, you cannot call this method from Java, even though you have perfectly legitimate reason to do so.
– Jörg W Mittag
Aug 25 '15 at 22:11
4
4
You can ridicule any feature by understanding its potential applications wrong or by giving bad examples. That doesn't imply that better uses don't exist. Sometimes, a reserved word in indeed the most natural name (as is often the case when the identifier
clazz
oder klass
is used).– Konrad Rudolph
Jan 14 '09 at 20:31
You can ridicule any feature by understanding its potential applications wrong or by giving bad examples. That doesn't imply that better uses don't exist. Sometimes, a reserved word in indeed the most natural name (as is often the case when the identifier
clazz
oder klass
is used).– Konrad Rudolph
Jan 14 '09 at 20:31
I don't think what I supposed was a 'bad example'. A bit over the top, yes, but not bad. Maybe the most natural name is a reserved word, is it good to use that name? Reserved words are reserved for a reason. It's easy to distinguish 'class' and 'clazz'. Can you distinguish 'class' and 'class'?
– lc.
Jan 15 '09 at 7:00
I don't think what I supposed was a 'bad example'. A bit over the top, yes, but not bad. Maybe the most natural name is a reserved word, is it good to use that name? Reserved words are reserved for a reason. It's easy to distinguish 'class' and 'clazz'. Can you distinguish 'class' and 'class'?
– lc.
Jan 15 '09 at 7:00
3
3
But not all languages agree what the reserved words are. In Scala, it is perfectly natural, to name a method that returns the default value
default
. This works perfectly fine, because default
is not a reserved word in Scala. It is, however, a reserved word in Java, thus, you cannot call this method from Java, even though you have perfectly legitimate reason to do so.– Jörg W Mittag
Aug 25 '15 at 22:11
But not all languages agree what the reserved words are. In Scala, it is perfectly natural, to name a method that returns the default value
default
. This works perfectly fine, because default
is not a reserved word in Scala. It is, however, a reserved word in Java, thus, you cannot call this method from Java, even though you have perfectly legitimate reason to do so.– Jörg W Mittag
Aug 25 '15 at 22:11
add a comment |
There is no way to use reserved words with the javac compiler.
Technically, you can edit the names inside the class file once it's compiled to be anything you want: at that stage, the VM doesn't care, because it's not dealing with source code any more. I believe some obfuscators use this technique.
add a comment |
There is no way to use reserved words with the javac compiler.
Technically, you can edit the names inside the class file once it's compiled to be anything you want: at that stage, the VM doesn't care, because it's not dealing with source code any more. I believe some obfuscators use this technique.
add a comment |
There is no way to use reserved words with the javac compiler.
Technically, you can edit the names inside the class file once it's compiled to be anything you want: at that stage, the VM doesn't care, because it's not dealing with source code any more. I believe some obfuscators use this technique.
There is no way to use reserved words with the javac compiler.
Technically, you can edit the names inside the class file once it's compiled to be anything you want: at that stage, the VM doesn't care, because it's not dealing with source code any more. I believe some obfuscators use this technique.
answered Jan 8 '09 at 16:37
Neil CoffeyNeil Coffey
18.6k65476
18.6k65476
add a comment |
add a comment |
PL/1 (a 1960's IBM mainframe programming language still around today) rather famously required that while some words act like keywords in certain contexts, all words can be used as identifiers. This isn't even that hard to do in a parser if you set out to be consistent about it. PL/1 was considered to a rather big langauge, and the langauge committee worried that many programmers wouldn't learn all of it, and then would get suprised when they tried to use the keyword from a part they didn't know as an identifier.
So you could write things like:
IF BEGIN=ELSE THEN CALL=3 ELSE CALL FOO(ENDIF) ENDIF
As others have noted here, the ability to do this isn't a recommendation.
The Java designers decided the number of keywords in the langauge was modest, and reserved the set. They even reserved 'GOTO', which isn't actually allowed in any real Java program.
add a comment |
PL/1 (a 1960's IBM mainframe programming language still around today) rather famously required that while some words act like keywords in certain contexts, all words can be used as identifiers. This isn't even that hard to do in a parser if you set out to be consistent about it. PL/1 was considered to a rather big langauge, and the langauge committee worried that many programmers wouldn't learn all of it, and then would get suprised when they tried to use the keyword from a part they didn't know as an identifier.
So you could write things like:
IF BEGIN=ELSE THEN CALL=3 ELSE CALL FOO(ENDIF) ENDIF
As others have noted here, the ability to do this isn't a recommendation.
The Java designers decided the number of keywords in the langauge was modest, and reserved the set. They even reserved 'GOTO', which isn't actually allowed in any real Java program.
add a comment |
PL/1 (a 1960's IBM mainframe programming language still around today) rather famously required that while some words act like keywords in certain contexts, all words can be used as identifiers. This isn't even that hard to do in a parser if you set out to be consistent about it. PL/1 was considered to a rather big langauge, and the langauge committee worried that many programmers wouldn't learn all of it, and then would get suprised when they tried to use the keyword from a part they didn't know as an identifier.
So you could write things like:
IF BEGIN=ELSE THEN CALL=3 ELSE CALL FOO(ENDIF) ENDIF
As others have noted here, the ability to do this isn't a recommendation.
The Java designers decided the number of keywords in the langauge was modest, and reserved the set. They even reserved 'GOTO', which isn't actually allowed in any real Java program.
PL/1 (a 1960's IBM mainframe programming language still around today) rather famously required that while some words act like keywords in certain contexts, all words can be used as identifiers. This isn't even that hard to do in a parser if you set out to be consistent about it. PL/1 was considered to a rather big langauge, and the langauge committee worried that many programmers wouldn't learn all of it, and then would get suprised when they tried to use the keyword from a part they didn't know as an identifier.
So you could write things like:
IF BEGIN=ELSE THEN CALL=3 ELSE CALL FOO(ENDIF) ENDIF
As others have noted here, the ability to do this isn't a recommendation.
The Java designers decided the number of keywords in the langauge was modest, and reserved the set. They even reserved 'GOTO', which isn't actually allowed in any real Java program.
answered Nov 8 '09 at 21:02
Ira BaxterIra Baxter
80.4k10131266
80.4k10131266
add a comment |
add a comment |
Not sure what you're trying to do, but $ is a valid character in identifiers, so you could do, say:
int $return = 5;
It looks a little weird, but it does work.
1
This is similar to @identifier in C#, although it doesn't end in the same result (in C# the '@' does not become part of the identifier)
– Hosam Aly
Jan 24 '09 at 8:38
add a comment |
Not sure what you're trying to do, but $ is a valid character in identifiers, so you could do, say:
int $return = 5;
It looks a little weird, but it does work.
1
This is similar to @identifier in C#, although it doesn't end in the same result (in C# the '@' does not become part of the identifier)
– Hosam Aly
Jan 24 '09 at 8:38
add a comment |
Not sure what you're trying to do, but $ is a valid character in identifiers, so you could do, say:
int $return = 5;
It looks a little weird, but it does work.
Not sure what you're trying to do, but $ is a valid character in identifiers, so you could do, say:
int $return = 5;
It looks a little weird, but it does work.
edited Oct 2 '11 at 9:34
Bohemian♦
297k65423557
297k65423557
answered Jan 9 '09 at 0:03
Kris PrudenKris Pruden
1,90342025
1,90342025
1
This is similar to @identifier in C#, although it doesn't end in the same result (in C# the '@' does not become part of the identifier)
– Hosam Aly
Jan 24 '09 at 8:38
add a comment |
1
This is similar to @identifier in C#, although it doesn't end in the same result (in C# the '@' does not become part of the identifier)
– Hosam Aly
Jan 24 '09 at 8:38
1
1
This is similar to @identifier in C#, although it doesn't end in the same result (in C# the '@' does not become part of the identifier)
– Hosam Aly
Jan 24 '09 at 8:38
This is similar to @identifier in C#, although it doesn't end in the same result (in C# the '@' does not become part of the identifier)
– Hosam Aly
Jan 24 '09 at 8:38
add a comment |
In Scala you can use backticks. For example: myVarialbe.`class`
add a comment |
In Scala you can use backticks. For example: myVarialbe.`class`
add a comment |
In Scala you can use backticks. For example: myVarialbe.`class`
In Scala you can use backticks. For example: myVarialbe.`class`
answered Sep 12 '12 at 17:21
JackJack
9,4391077146
9,4391077146
add a comment |
add a comment |
If you really need to use a field/local variable/method named the same as a reserved word, I suggest appending an underscore at the end of the name:
// JPA entity mapping class:
private Boolean void_;
public Boolean getVoid_() { ... }
void setVoid_(Boolean void_) { ... }
It is a more readable choice (IMHO) than appending chars at the beginning of the name (fVoid, aVoid, vVoid, etc.)
The code above is a real world case that happened to me, working with a legacy database, in which the invoice
table had a field named void
indicating whether the document had been voided or not.
add a comment |
If you really need to use a field/local variable/method named the same as a reserved word, I suggest appending an underscore at the end of the name:
// JPA entity mapping class:
private Boolean void_;
public Boolean getVoid_() { ... }
void setVoid_(Boolean void_) { ... }
It is a more readable choice (IMHO) than appending chars at the beginning of the name (fVoid, aVoid, vVoid, etc.)
The code above is a real world case that happened to me, working with a legacy database, in which the invoice
table had a field named void
indicating whether the document had been voided or not.
add a comment |
If you really need to use a field/local variable/method named the same as a reserved word, I suggest appending an underscore at the end of the name:
// JPA entity mapping class:
private Boolean void_;
public Boolean getVoid_() { ... }
void setVoid_(Boolean void_) { ... }
It is a more readable choice (IMHO) than appending chars at the beginning of the name (fVoid, aVoid, vVoid, etc.)
The code above is a real world case that happened to me, working with a legacy database, in which the invoice
table had a field named void
indicating whether the document had been voided or not.
If you really need to use a field/local variable/method named the same as a reserved word, I suggest appending an underscore at the end of the name:
// JPA entity mapping class:
private Boolean void_;
public Boolean getVoid_() { ... }
void setVoid_(Boolean void_) { ... }
It is a more readable choice (IMHO) than appending chars at the beginning of the name (fVoid, aVoid, vVoid, etc.)
The code above is a real world case that happened to me, working with a legacy database, in which the invoice
table had a field named void
indicating whether the document had been voided or not.
edited Nov 28 '18 at 21:51
answered Nov 26 '18 at 15:49
jpangamarcajpangamarca
465927
465927
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f423994%2freserved-words-as-variable-or-method-names%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
4
just don't do it
– inspite
Jan 8 '09 at 11:49
5
It's not so strange, that he want do that. That's why C# has @ prefix, and Delphi has & and variable or method named eg. @if is legal in C#.
– prostynick
Sep 3 '10 at 8:04
5
I don't get all the "don't do it" comments. It is perfectly legitimate to call APIs from Java that weren't themselves written in Java, and there are identifiers which are perfectly legal in JVM byte code which aren't legal in Java. That's precisely why languages like C# (
@class
), Scala (`class`
) and others have escaping mechanisms. There are 500 languages on the JVM, if I tried to take every single reserved word from every single one of those 500 languages into account when designing APIs, I'd go insane (and someone might invent a new language with a new reserved word later anyway).– Jörg W Mittag
Aug 25 '15 at 22:05