Использование статических вложенных классов при создании закрытых иехархий
От: 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;
    }
  }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.