throw new NoSuchTaskException(taskId, null, null, null, null)
, ...
Думаю, из примеров использования становится ясно, почему я считаю, что это не лучшая реализация/использование. Моя идея заключалась в том, чтобы улучшить это, используя шаблон компоновщика:
Я ищу лучший способ написать собственное исключение: [code]public class NoSuchTaskException extends BaseImpactException { private final String taskId; private final String taskType; private final Long userId; private final DocumentType documentType; private final Long documentId;
public NoSuchTaskException(String taskId, String taskType, Long userId, DocumentType documentType, Long documentId) { this(taskType, userId, documentType, documentId, taskId, null); }
public NoSuchTaskException(String taskType, Long userId, DocumentType documentType, Long documentId) { this(taskType, userId, documentType, documentId, null, null); }
public NoSuchTaskException(String taskType, Long userId, DocumentType documentType, Long documentId, String taskId, Throwable throwable) { super("exception.task.noSuchTask", throwable); this.taskId = taskId; this.taskType = taskType; this.userId = userId; this.documentType = documentType; this.documentId = documentId; } // ... } [/code] который я затем использую в разных местах: [list] [*][code]throw new NoSuchTaskException(taskId, null, isUserPresent ? null : addedById, null, null)[/code]; [*][code]throw new NoSuchTaskException(taskId, taskType.name(), taskExecutorId, null, null)[/code]; [*][code]throw new NoSuchTaskException(taskId, null, null, null, null)[/code], ... [/list] Думаю, из примеров использования становится ясно, почему я считаю, что это не лучшая реализация/использование. Моя идея заключалась в том, чтобы улучшить это, используя шаблон компоновщика: [code]public class NoSuchTaskException extends BaseImpactException { private final String taskId; private final String taskType; private final Long userId; private final DocumentType documentType; private final Long documentId;
public NoSuchTaskException build() { return new NoSuchTaskException(this); } } } [/code] который я затем могу использовать как: [code]throw NoSuchTaskException.builder("task123") .documentType(DocumentType.DOCUMENT_B) .documentId(500L) .build(); [/code] вместо того, чтобы использовать его следующим образом: [code]throw new NoSuchTaskException("task123", null, null, DocumentType.DOCUMENT_B, 500L); [/code] Это приемлемый подход? Должен ли я использовать шаблон построителя в своем исключении, или это излишество (или даже запах кода)?