«Rd» выходит с уровнем ошибки, установленным в 0, в случае ошибки при удалении и т. Д.

Нет смысла указывать статический метод в нестационарном внутреннем классе; как бы вы к нему обращались? Вы не можете получить доступ (по крайней мере на начальном этапе) нестатический экземпляр внутреннего класса без прохождения экземпляра внешнего класса. Нет никакого статического способа создания нестатического внутреннего класса.

Для внешнего класса Outer вы можете получить доступ к статическому методу test() следующим образом:

Outer.test();

Для статического внутреннего класса Inner вы можете получить доступ к его статическому методу innerTest() следующим образом:

Outer.Inner.innerTest();

Однако, если Inner не является статичным, теперь нет чисто статического способа для ссылки на метод innertest. Нестатические внутренние классы привязаны к конкретному экземпляру их внешнего класса. Функция отличается от константы тем, что ссылка на Outer.Inner.CONSTANT гарантирована однозначно так, что вызов функции Outer.Inner.staticFunction(); не является. Допустим, у вас есть Inner.staticFunction(), который вызывает getState(), который определен в Outer. Если вы попытаетесь вызвать эту статическую функцию, у вас теперь есть двусмысленная ссылка на класс Inner. То есть, на каком экземпляре внутреннего класса вы вызываете статическую функцию? Это важно. Смотрите, нет действительно статического способа ссылаться на этот статический метод из-за неявной ссылки на внешний объект.

Пол Беллора прав, что дизайнеры языка могли это допускать. Затем им следует тщательно запретить любой доступ к неявной ссылке на внешний класс в статических методах нестатического внутреннего класса. На данный момент, каково значение для этого внутреннего класса, если вы не можете ссылаться на внешний класс, кроме статически? И если статический доступ в порядке, то почему бы не объявить весь внутренний класс static? Если вы просто сделаете внутренний класс статическим, то у вас нет неявной ссылки на внешний класс, и у вас больше нет этой двусмысленности.

Если вам действительно нужны статические методы для нестатического внутреннего класса, то вам, вероятно, нужно переосмыслить свой дизайн.

13
задан underscore_d 27 April 2018 в 03:31
поделиться