собственный класс-исключение java

200
28 января 2019, 08:00

Пытаюсь реализовать собственный класс-исключение. Согласно условию он должен выводить сообщение об ошибке по умолчанию ("Устройство недоступно") и иметь поле "устройство" с геттером, которое хранит невалидный объект-устройство, который привел к появлению исключения.

Делаю так:
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.

Answer 1

У вас код исключения, код который бросает исключение и код который обрабатывает исключение почему-то смешаны в кучу.

Класс исключения:

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()
    }
}
READ ALSO
как заставить JPanel накладыватсья на JPanel

как заставить JPanel накладыватсья на JPanel

Суть в том, что я добавил фото как Background, и сверху хочу еще добавить элементов (линии, другие панели, текс - это не важно), но при добавлении,...

183
Picasso 2.7. Как очистить кэш?

Picasso 2.7. Как очистить кэш?

Приложение загружает в RecyclerView много изображений из сети с помощью Picasso, версия 271828

180
Не запускается gdx-setup

Не запускается gdx-setup

Не запускается jar файл gdx-setupПри нажатии ничего не происходит

180
Проблема с ДЖЕНЕРИКАМИ

Проблема с ДЖЕНЕРИКАМИ

Помогите мучает воппрос, есть абстрактный класс с одним абстрактным методом:

177