Пытаюсь реализовать собственный класс-исключение. Согласно условию он должен выводить сообщение об ошибке по умолчанию ("Устройство недоступно") и иметь поле "устройство" с геттером, которое хранит невалидный объект-устройство, который привел к появлению исключения.
Делаю так:public class DeviceValidationException extends RuntimeException {
public void start() throws IllegalStateException{
throw new IllegalStateException ("Device is not valid for operation");
}
protected int device;
public int getDevice() throws IllegalStateException{
try {
return device;
}
catch (IllegalStateException e){
System.out.println("Device is not valid for operation");
throw e;
}
}
Но есть серьезное подозрение, что это неправильно и мой гет-метод совершенно не хранит то, что нужно. Кроме того нужен ли мне сеттер в пару?
Далее необходимо реализовать конструктор с 2 аргументами-строкой, которой будет передаваться имя операции, для которой устройство оказалось невалидным (я так понимаю, что это будет метод getDevice но как это сделать,увы, не понимаю) и объектом-устройством (device Device), который привёл к появлению исключения. При этом конструктор должен вызвать родительский конструктор с аргументом-строкой, но передать не входящую строку, а собрать её из сообщения по умолчанию и, если входящая не null, добавить ее через пробел. Аргумент device задаёт значение полю device. И тут проблема возникла еще на объявлении конструктора( DeviceValidationException (String operation, Device device){
super(operation, device);
}
Компилятор ругается на device.
У вас код исключения, код который бросает исключение и код который обрабатывает исключение почему-то смешаны в кучу.
Класс исключения:
public class DeviceValidationException extends RuntimeException {
private Device device;
public DeviceValidationException (Device device) {
super("Device " + device.getName() + " is not valid for operation");
this.device = device;
}
public Device getDevice() {
return device;
}
Пример обработки:
try {
//код который бросает исключение
}
catch (DeviceValidationException e) {
System.out.println(e.message());
//можно сделать что-нибудь с device
e.getDevice().doAnything()
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей