Необходимо установить атрибут перед вызовом superJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Необходимо установить атрибут перед вызовом super

Сообщение Anonymous »

Я создаю собственное исключение для анализа файла определенного формата. Базовый класс — FileFormatException (я заменил имя формата файла на FileFormat). У него есть конструктор public FileFormatException(String filepath), который выводит общее сообщение об ошибке, например «Ошибка синтаксического анализа ».
Теперь трудность возникает, когда я попробуйте создать подклассы для более конкретных ошибок. Эти подклассы будут иметь свои собственные сообщения об ошибках, для чего требуется такой метод, как public FileFormatException(String message). Но это невозможно, так как это конфликтует с первым конструктором (они оба имеют одинаковые параметры).
Я пытался решить проблему, добавив защищенный метод setMessage в FileFormatException, которое могут вызывать подклассы, но это не сработает, поскольку Java не позволяет устанавливать атрибуты перед вызовом super().
У меня есть тоже рабочее решение, но оно очень жесткое. При вызове подкласса я вынужден каждый раз включать сообщение по умолчанию в специальное сообщение подкласса.
Ограничения:
  • Подклассы должны наследовать от FileFormatException
  • Сообщение можно установить только путем вызова super(message), поскольку Exception это делает нет установщика для сообщения.
Мне кажется, что Java загоняет меня в странный угол, поскольку у исключений нет установщиков.
Пример
public class FileFormatException extends Exception {
public FileFormatException(String filepath) {
super("Error parsing the file: " + filepath);
}

// This is prohibited in Java
public FileFormatException(String message) {
super(message);
}
}

public class SpecificException extends FileFormatException {
public SpecificException(String filepath) {
super("Printing specific error message for: " + filepath);
}
}

Неудачная попытка
public class FileFormatException extends Exception {
private String message = null;

public FileFormatException(String filepath) {
super("Error parsing the file: " + filepath);
}

public FileFormatException() {
if (message == null) { // This is probably not allowed either
super();
} else {
super(message);
}
}

public void setMessage(String message) {
this.message = message;
}
}

public class SpecificException extends FileFormatException {
public SpecificException(String filepath) {
setMessage(message); // Java does not allow this
super();
}
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... ling-super
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»