Как обработать статический заключительный полевой инициализатор, который бросает контролируемую исключительную ситуацию

DejaVu Без Моно (иногда известный как Паника Без), размер 11, anti-alised. Ранее я только использовал шрифты, которые не были сглажены, но это просто, кажется, работает на этот шрифт.

Screenshot of Panic Sans in Sublime Text

37
задан Romain 8 December 2009 в 12:50
поделиться

3 ответа

If you don't like static blocks (some people don't) then an alternative is to use a static method. IIRC, Josh Bloch recommended this (apparently not in Effective Java on quick inspection).

public static final ObjectName OBJECT_NAME = createObjectName("foo:type=bar");

private static ObjectName createObjectName(final String name) {
    try {
        return new ObjectName(name);
    } catch (final SomeException exc) {
        throw new Error(exc);
    }  
}

Or:

public static final ObjectName OBJECT_NAME = createObjectName();

private static ObjectName createObjectName() {
    try {
        return new ObjectName("foo:type=bar");
    } catch (final SomeException exc) {
        throw new Error(exc);
    }  
}

(Edited: Corrected second example to return from method instead of assign the static.)

49
ответ дан 27 November 2019 в 04:37
поделиться

Ваш код действителен. Мне не сложно читать. Иначе было бы только хуже. Их трудно читать только для начала, потому что большинство из них не знакомы с этим. Просто следуйте стандартным соглашениям в отношении порядка элементов в коде. Например, не помещайте статические инициализаторы на полпути или внизу кода, а также не допускайте, чтобы несколько из них распространялись по классу. Просто поместите один вверху после статических объявлений.

17
ответ дан 27 November 2019 в 04:37
поделиться

статические блоки читать несложно. Так что я бы порекомендовал это решение. Однако вы можете обернуть свой объект другим объектом, например ObjectNameWrapper , который разделяет интерфейс с вашим ObjectName , и чей конструктор вызывает ваш конструктор ObjectName , скрывая все возникающие отмеченные исключения. Но опять же, я бы выбрал статический вариант.

5
ответ дан 27 November 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: