Nom de la classe Java contenant le signe du dollar ne peut pas compiler si un intérieur classe est présent

J'ai Java suivant les classes définies:

mac-grek:javajunk grek$ cat A$B.java
class A$B {}
mac-grek:javajunk grek$ cat A.java
public class A {
  public static class B {}
}
mac-grek:javajunk grek$ cat Main.java 
public class Main {

  public static void main(String[] args) {
    System.out.println(A.B.class.getName());
    System.out.println(A$B.class.getName());
  }

}

Lorsque j'essaie de compiler, j'obtiens les erreurs suivantes:

mac-grek:javajunk grek$ javac 'A$B.java' A.java Main.java
A.java:2: duplicate class: A.B
  public static class B {}
                ^
Main.java:4: cannot find symbol
symbol  : class B
location: class A
    System.out.println(A.B.class.getName());
                        ^
Main.java:5: cannot find symbol
symbol  : class A$B
location: class Main
    System.out.println(A$B.class.getName());
                       ^
3 errors

Si je supprime A.java fichier et System.out.println(A.B.class.getName()); de Main.java tout compile:

mac-grek:javajunk grek$ cat A$B.java 
class A$B {}
mac-grek:javajunk grek$ cat Main.java 
public class Main {

  public static void main(String[] args) {
    System.out.println(A$B.class.getName());
  }

}
mac-grek:javajunk grek$ javac A$B.java Main.java
mac-grek:javajunk grek$ 

Donc Java me permet de définir une classe contenant le signe du dollar dans son nom. Comment puis-je compiler mon exemple original?

  • A,$B signifie que B est un intérieur de classe de l'Un, peut vous suggérer de lire download.oracle.com/javase/tutorial/java/javaOO/nested.html
  • Pas vraiment parce que je peux définir Une classe nommée$B et c'est pas de l'intérieur de la classe d'une autre classe comme mon deuxième exemple montre.