Не может наследовать от исключения - PullRequest
0 голосов
/ 21 февраля 2012

Я пытаюсь написать класс BrokenObjectException, производный от Exception.Но в Eclipse я получаю эту ошибку:

Сериализуемый класс BrokenObjectException не объявляет статическое окончательное поле serialVersionUID типа long

public class BrokenObjectException extends Exception
{
    BrokenObject(String message)
    {
        ;
    }
}

Я не понял, почему этопросит меня объявить поле.Разве интерфейс не должен просто объявить некоторые методы?В любом случае я хочу иметь этот класс, потому что я хочу поймать его не так, как я перехватываю все исключения, из моего примера у меня есть блок:

try
{
    if(...)
        throw new Exception("wrong");
    if(...)
        throw new BrokenObjectException("wrong");
}
catch(BrokenObjectException e)
{
    // do something (action1)
    throw e;
}
catch(Exception e)
{
    // so something (action2)
    throw e;
}

Итак, в первом блоке перехвата я написал "сделай что-нибудь".Это связано с тем, что в зависимости от типа создаваемого исключения я хочу выполнять различные действия.Таким образом, поскольку BrokenObjectException является производным от Exception, его следует перехватывать два раза.Но если выдается BrokenObjectException, я хочу сделать action1 и action2, если выдается только обычное исключение, я хочу просто сделать action2.Это возможно?И как исправить полученную ошибку?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Это не ошибка, а скорее предупреждение. Просто используйте аннотацию @SuppressWarnings("serial") чуть выше объявления класса:

@SuppressWarnings("serial")
public class BrokenObjectException extends Exception
{
    BrokenObject(String message)
    {
        ;
    }
}

Что происходит, вы расширяете класс, который реализует интерфейс Serializable, и поэтому компилятор предупредит вас, если вы не полностью соблюдаете его контракт. Чтобы обойти это (поскольку я сомневаюсь, что вы захотите сериализовать объекты этого класса), просто используйте аннотацию выше.

2 голосов
/ 21 февраля 2012

Я полагаю, что вы можете просто выделить текст ошибки, который дает вам eclipse, и затем сказать ему, чтобы генерировать UUID последовательной версии.После этого все должно работать так, как вы хотите.

Также вы можете использовать

@SuppressWarnings("serial")

, если хотите просто игнорировать его.Тем не менее, я бы порекомендовал идти вперед и генерировать его.Для получения дополнительной информации о том, почему стоит проверить этот пост переполнения стека. Что такое serialVersionUID и зачем его использовать?

1 голос
/ 21 февраля 2012

Знаете ли вы, зачем нужно это поле serialVersionUID?Это то, что вы просите?если это так, пожалуйста, посмотрите на следующую ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...