Когда я захочу сделать статический класс закрытым? - PullRequest
56 голосов
/ 03 июня 2011

В целом, есть ли какие-либо преимущества в объявлении частного класса статическим?

В каких случаях я хотел бы использовать одно из следующих по сравнению с другим?

private static class Foo
{
    ...
}

против

private class Foo
{
    ...
}

Ответы [ 5 ]

41 голосов
/ 28 февраля 2014

Я думаю, что это хорошая отправная точка: http://java67.blogspot.fi/2012/10/nested-class-java-static-vs-non-static-inner.html

1) Вложенный статический класс не нуждается в ссылке на внешний класс, но не статический вложенный класс или внутренний класс требует ссылки на внешний класс. Вы не может создать экземпляр класса Inner без создания экземпляра Внешний класс. Это, безусловно, самая важная вещь, которую следует учитывать при сделать вложенный класс статическим или нестатическим.

2) статический класс на самом деле является статическим членом класса и может использоваться в статический контекст, например статический метод или статический блок класса Outer.

3) Еще одно различие между статическим и нестатическим вложенным классом что вы не можете получить доступ к нестатическим членам, например метод и поле в вложенный статический класс напрямую. Если вы это сделаете, вы получите ошибку, как "не статический член не может быть использован в статическом контексте ". В то время как внутренний класс может получить доступ как к статическому, так и к нестатическому члену класса Outer.

2 голосов
/ 03 июня 2011

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

1 голос
/ 03 июня 2011

Я предполагаю, что вы имеете в виду внутренние классы.

Я думаю, что мотивация будет исходить из того, как вы хотите связать свой внутренний класс. Если вы хотите, чтобы ваш внутренний класс был связан с конкретным экземпляром его внешнего класса, вы должны использовать private class, в противном случае используйте private static class.

0 голосов
/ 26 марта 2014

Мне показалось полезным иметь конкретное исключение в общем абстрактном классе.Т.е.

0 голосов
/ 03 июня 2011

статические классы отличаются от обычных классов только тем, что к ним можно получить доступ без создания их экземпляров.поэтому, если вам нужен какой-то класс, доступный каждый раз, используйте static

...