Parole riservate come nomi di variabili o di metodi

C’è qualche modo complicato per usare le parole riservate di Java come nomi di variabili o di metodi?

No, non c’è modo. Ecco perché sono etichettati come “riservati”.

Questa è una domanda valida. Una cosa del genere è ansible in altre lingue. In C #, prefisso l’identificatore con @ ( come richiesto in precedenza ); in Delphi, prefisso con & . Ma Java non offre tale funzionalità (in parte perché non ha realmente bisogno di interagire con gli identificatori definiti da altri linguaggi come fa il mondo .Net).

Molto spesso questo problema si presenta in “class”, in questo caso è consuetudine scrivere “clazz”.

No, non puoi farlo. Per ulteriori informazioni, consultare le sezioni 3.8, 3.9 di JLS

Le seguenti sequenze di caratteri, formate da lettere ASCII, sono riservate all’uso come parole chiave e non possono essere utilizzate come identificatori (§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 

A rigor di termini non si può, a meno di non mettere le mani su un’implementazione del compilatore che non rispetta le specifiche del linguaggio Java.

Ma dove c’è una volontà, c’è un modo. Copia il seguente codice nel tuo IDE, cambia la codifica del file sorgente in UTF-16 e qui andiamo:

 public class HelloWorld { public static void main(String[] args) { HelloWorld.nеw(); } public static void nеw () { System.out.println("Hello,World"); } } 

Questo codice è una class Java ben formata e valida. Tuttavia, come hai indovinato, c’è un piccolo trucco: il carattere ‘е’ all’interno dell’identificatore “nuovo” non appartiene al set di caratteri ASCII, è in realtà un ‘ë’ cirillico (‘YE’ prounanced).

Le attuali specifiche del linguaggio Java consentono esplicitamente, e questo è un punto importante da fare, l’uso di Unicode per la denominazione degli identificatori. Ciò significa che si ha la possibilità di chiamare liberamente lei o le sue classi in francese, cinese o russo, se lo desiderano. È anche ansible combinare e combinare gli alfabeti all’interno del codice. E storicamente, alcune lettere all’interno del latino e altri alfabeti sono simili.

Di conseguenza: no, non è ansible utilizzare le parole riservate come identificatori, ma è ansible utilizzare identificativi che assomigliano esattamente a parole riservate.

Se qualcuno dovrebbe farlo è una questione completamente diversa.

Si C’è. Devi usare parole riservate dal futuro. Come quello che è successo con diversi metodi chiamati assert () nel codice pre-1.4.

Spero che sia d’aiuto!

Eh? Perché vorresti farlo? Puoi scriverli in l33t, che ingannare il compilatore.

 class cl4ss { String r3turn() { return "but why?"; } } 

So che è ancora una vecchia domanda, potrebbe aiutare qualcuno.

È ansible utilizzare il supporto per la denominazione dei campi di GSON

per esempio.

 @SerializedName("new") private String New; public String getNew () { return New; } public void setNew (String aNew) { New = aNew; } 

È già abbastanza grave che alcuni linguaggi sensibili alle maiuscole e minuscole consentano cose come le seguenti:

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

Ma perché vorresti mai essere in grado di scrivere una riga di codice come questa:

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

Basta dare un’occhiata all’evidenziazione della syntax. Anche si confonde!

Non c’è modo di usare parole riservate con il compilatore javac .

Tecnicamente, è ansible modificare i nomi all’interno del file di class una volta compilato per essere tutto ciò che si desidera: in quel momento, la VM non si cura, perché non si occupa più del codice sorgente. Credo che alcuni offuscatori utilizzino questa tecnica.

Il PL / 1 (un linguaggio di programmazione del mainframe IBM degli anni ’60 ancora oggi) richiedeva piuttosto che mentre alcune parole si comportano come parole chiave in certi contesti, tutte le parole possono essere usate come identificatori. Questo non è nemmeno così difficile da fare in un parser se si è disposti ad essere coerenti al riguardo. Il PL / 1 era considerato come un linguaggio piuttosto grande, e il comitato linguistico temeva che molti programmatori non l’avrebbero imparato tutto e sarebbero rimasti sorpresi quando provarono a usare la parola chiave da una parte che non conoscevano come identificatore . Quindi potresti scrivere cose come:

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

Come altri hanno notato qui, la capacità di farlo non è una raccomandazione.

I progettisti Java hanno deciso che il numero di parole chiave nella lingua era modesto e riservato il set. Hanno persino prenotato “GOTO”, che in realtà non è consentito in nessun vero programma Java.

Non sei sicuro di cosa stai cercando di fare, ma $ è un carattere valido negli identificatori, quindi potresti fare, ad esempio:

int $return = 5;

Sembra un po ‘strano, ma funziona.

In Scala puoi usare i backtick. Ad esempio: myVarialbe .class`