Выражение создания экземпляра локального класса происходит в статическом контексте – ошибка компиляции?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Выражение создания экземпляра локального класса происходит в статическом контексте – ошибка компиляции?

Сообщение Anonymous »

Рассмотрим следующий отрывок из JLS: §15.9.2. Определение включающих экземпляров
  • Если C — локальный класс, то:

    Если C встречается в статическом контексте, то у i нет непосредственно включающего экземпляра.
  • Иначе, если выражение создания экземпляра класса происходит в статическом контексте, то возникает ошибка времени компиляции.
  • Иначе, пусть O — класс, непосредственно включающий C. Пусть n — целое число такое, что O — n-е лексически включающее объявление типа класса, в котором появится выражение создания экземпляра класса.
    Непосредственно включающий экземпляр i является n-м лексически включающим экземпляром this.




    Применимый код, который я могу придумать - это предложение пытается сказать следующее:

    Код: Выделить всё

    class Outer {
    void instanceMethod() {
    class LocalNonStaticContext {
    void print() {
    System.out.println("Has enclosing instance of Outer.");
    }
    }
    new LocalNonStaticContext().print(); // Valid because we're in a non-static context.
    }
    
    static void staticMethod() {
    // Compile-time error: LocalNonStaticContext requires an enclosing instance.
    // new LocalNonStaticContext();
    }
    }
    
    • Но это кажется слишком наивным - поскольку подразумевается, что область действия локального класса ограничена методом, в котором он объявлен - следовательно, невозможно вызвать его из любого другого метода.
    Какой может быть сценарий, который пытается вызвать это предложение, чтобы произошла ошибка компиляции - что оно пытается предотвратить?


    Подробнее здесь: https://stackoverflow.com/questions/792 ... compilatio
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»