Использование статических вложенных классов при создании закрытых иехархий
От: Joie de vivre  
Дата: 23.08.14 12:57
Оценка:
Есть некая иерархия классов — абстрактный класс и несколько наследников, которые объявлены final.
Код, который это реализует, можно написать с использованием статических вложенных классов, а можно каждый класс-наследник вынести на уровень базового, создав его в в отдельном файле.
Вопрос 1:
Какие достоинства/недостатки есть у подхода, который использует статические вложенные классы (если они есть)?
Вопрос 2:
Какой из подходов является более идиоматическим?

Пример кода, использующего статические вложенные классы.
public abstract class ClientMessage {

  ClientMessage() {
  }  

  public static final class Response extends ClientMessage {
    
    public final byte[] payload;

    public Response(byte[] payload) {
      super();
      this.payload = payload;         
    }       
  }    

  public static final class Timeout extends ClientMessage {

    public Timeout() {
      super();
    }
  }
  
  public static final class Fault extends ClientMessage { 
   
    public final Throwable cause;    

    public Fault(Throwable cause) {
      super();
      this.cause = cause;
    }
  }
}
Re: Использование статических вложенных классов при создании закрытых иехархий
От: Blazkowicz Россия  
Дата: 25.08.14 06:08
Оценка:
Здравствуйте, Joie de vivre, Вы писали:

JDV>Вопрос 1:

JDV>Какие достоинства/недостатки есть у подхода, который использует статические вложенные классы (если они есть)?
Иерархия имеет свойство расти и развиваться вместе с проектом. Поэтому наличие всех классов в одном файле раздувает код и усложняет чтение. Увидеть список вложеных классов можно только в IDE, которая это поддерживает.
Ежели эти вложеные классы реализуют какую-то законченую задачу, при этом представляют из себя очень компактный код (например Enum, где каждый элемент может ещё и содержать реализацию.) Тогда вложены классы вполне имееют право на жизнь.

JDV>Вопрос 2:

JDV>Какой из подходов является более идиоматическим?
Смотря что под этим подразумевается. Лучше вложеными классами не увлекаться, особенно если не можешь точно предсказать будет ли этот код развиваться дальше.
Re: Использование статических вложенных классов при создании закрытых иехархий
От: vsb Казахстан  
Дата: 25.08.14 06:38
Оценка: 5 (1) +1
Можно начать со вложенных классов и потом раскидать их по отдельным файлам, если ситуация начнёт выходить из под контроля. По-мне, если идентификатор получается осмысленным, то лучше вкладывать. ClientMessage.Response звучит красиво и хорошо читается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.