Рассмотрим следующие два класса:искореженных Вложенный класс namein Спецификация языка Java-
// a.java
public class a
{
public static class $b
{
}
}
// a$.java
public class a$
{
public static class b
{
}
}
Очевидно, что из-за внутренней/вложенное имя класса коверкая, в $ .b и а. $ b будет скомпилирован в файл класса с именем $$ b.class. Когда команда javac a.java a$.java
выполняется, Oracle Java компилятор (Javac 1.7.0_45) производит следующий вывод:
a$.java:3: error: duplicate class: a.$b
public static class b
^
1 error
Где это сказать в спецификации языка Java, что эти имена классов (a$.b
и a.$b
) столкновение, или это просто установленное соглашение из-за выходных файлов с таким же именем?
Я предполагаю, что это говорит, что это в какой-либо части сделки JLS с именем коверкая внутренних классов и, таким образом, определяет, что поведение. Не имея копии JLS, это просто догадка. – keshlam
@keshlam У каждого есть копия JLS, если у них есть интернет;) –
@BrianRoach Не все должны читать его по юридическим причинам. Мне нужно быть немного более осторожным, чем некоторые. – keshlam