Solución:
$
es utilizado internamente por el compilador para decorar ciertos nombres. Wikipedia da el siguiente ejemplo:
public class foo {
class bar {
public int x;
}
public void zark () {
Object f = new Object () {
public String toString() {
return "hello";
}
};
}
}
La compilación de este programa producirá tres archivos .class:
-
foo.class
, que contiene la clase principal (exterior)foo
-
foo$bar.class
, que contiene la clase interna nombradafoo.bar
-
foo$1.class
, que contiene la clase interna anónima (local al métodofoo.zark
)
Todos estos nombres de clases son válidos (como $
los símbolos están permitidos en la especificación JVM).
En un sentido similar, javac
usos $
en algunos generados automáticamente nombres de variables: por ejemplo, this$0
et al se utilizan para el implícito this
referencias de las clases internas a sus clases externas.
Finalmente, JLS recomienda lo siguiente:
los
$
El carácter debe usarse solo en el código fuente generado mecánicamente o, en raras ocasiones, para acceder a nombres preexistentes en sistemas heredados.
No hay un significado especial para un $
en el nombre de una variable.
Aunque técnicamente está permitido, comenzar el nombre de la variable con un signo de dólar va en contra de la convención, generalmente utilizado solo por generadores de código.
Para citar el tutorial de Java de Oracle:
Los nombres de las variables distinguen entre mayúsculas y minúsculas. El nombre de una variable puede ser cualquier identificador legal: una secuencia de longitud ilimitada de letras y dígitos Unicode, que comienza con una letra, el signo de dólar “$” o el carácter de subrayado “_”. La convención, sin embargo, es comenzar siempre los nombres de las variables con una letra, no con “$” o “_”. Además, el carácter de signo de dólar, por convención, nunca se usa en absoluto. Es posible que encuentre algunas situaciones en las que los nombres generados automáticamente contengan el signo de dólar, pero los nombres de sus variables siempre deben evitar su uso. Existe una convención similar para el carácter de subrayado; Si bien es técnicamente legal comenzar el nombre de la variable con “_”, esta práctica no se recomienda. No se permiten espacios en blanco.