Разработайте список definitition как простой набор значения ключа

Исключение, создаваемое статическим инициализатором, может указывать на проблему проектирования. На самом деле вы не должны пытаться загрузить файлы в статику. Кроме того, static не должен быть изменчивым.

Например, работая с JUnit 3.8.1, вы могли почти использовать его из апплета / WebStart, но это не удалось из-за одного статического инициализатора, осуществляющего доступ к файлу. Остальная часть задействованного класса отлично подходила для контекста, просто этот кусочек статики не соответствовал контексту и разрушал всю структуру.

В некоторых законных случаях возникает исключение. Если это тот случай, когда среда не имеет конкретной функции, скажем, потому что это старый JDK, то вы можете заменить реализации, и в этом нет ничего необычного. Если класс на самом деле не работает, создайте непроверенное исключение, а не разрешайте существование сломанного класса.

В зависимости от ваших предпочтений и имеющейся проблемы, есть два распространенных способа обойти это: явный статический инициализатор и статический метод. (Я, и я думаю, что большинство людей предпочитают первое; я считаю, что Джош Блох предпочитает второе.)

private static final Thing thing;

static {
    try {
        thing = new Thing();
    } catch (CheckedThingException exc) {
        throw new Error(exc);
    }
}

Или

private static final Thing thing = newThing();

private static Thing newThing() {
    try {
        return new Thing();
    } catch (CheckedThingException exc) {
        throw new Error(exc);
    }
}

Примечание: статика должна быть окончательной (и в целом неизменный). Будучи окончательным, правильное одиночное назначение проверяется вашим дружественным компилятором. Определенное присваивание означает, что оно может отловить прерванную обработку исключений - переносить и выбрасывать, не печатать / регистрировать. Как ни странно, вы не можете использовать имя класса, чтобы квалифицировать инициализацию с именем класса в статическом инициализаторе (я уверен, что для этого есть веская причина).

Инициализаторы экземпляров похожи, хотя вы можете заставить конструктор бросить или вы можете поместить инициализатор в конструктор.

5
задан Tomas 16 October 2009 в 11:10
поделиться

5 ответов

Я думаю, это сработает:

dt {
  float: left;
  clear: left;
  margin: 0;
  padding: 0 .5em 0 0;
}
dd {
  margin: 0;
  padding: 0;
}

Другой полезный вариант - это псевдокласс : after . Вы можете пропустить двоеточие в каждом из элементов dt и иметь:

dt:after {
  content: ":";
}

Это делает его более гибким, и вы можете изменить этот символ во всем списке и на веб-сайте в целом или избавиться от него, если вы казалось, что это похоже.

Чтобы решить проблему упаковки, о которой вы упомянули, вам необходимо установить ширину для элементов dt и dd . Или используйте таблицу с th для имени / адреса и т. Д. И td для «данных».

8
ответ дан 14 December 2019 в 04:42
поделиться

Вы можете просто поместить dd слева от предыдущего элемента, вот так.

dt { clear: left; }
dd { float: left; }

Вы также можете добавить атрибут ширины к любому из них для дополнительного выравнивания.

dt { clear: left; width: 20%; }
dd { float: left; }
0
ответ дан 14 December 2019 в 04:42
поделиться

Ну, вы можете просто позволить dt float: left

dt { float: left; }

или позволить dt отображать строку:

dt { display: inline; }
0
ответ дан 14 December 2019 в 04:42
поделиться

Вам необходимо удалить левое поле по умолчанию из dd.

dt {float:left;clear:left;margin-right:5px;}
dd {margin:0;}
0
ответ дан 14 December 2019 в 04:42
поделиться

Я думаю, что (раскомментируйте первую строку для проверки на малую ширину):

dl, dd, dt { margin: 0; }
/*dl { width: 80px; }*/
dl dt, dl dd { display: inline; }
dl dd:after { content: ' '; padding-left: 100%; }
0
ответ дан 14 December 2019 в 04:42
поделиться