При вызове метода IdentityWrapper.equals()
. LinkedHashSet
не пройдет ELEM
, а скорее IdentityWrapper
объект.
Вам необходимо ввести дополнительную проверку (instanceOf
), а затем развернуть переданный объект для сравнения элементов:
public boolean equals(Object obj) {
return (obj instanceof IdentityLinkedHashSet<?>.IdentityWrapper) &&
ELEM == ((IdentityLinkedHashSet<?>.IdentityWrapper) obj).ELEM;
}
Некоторые примечания:
instanceof
проверит на ноль, так что вы можете удалить эту проверку полностью. Вы должны ссылаться на IdentityWrapper
следующим образом: IdentityLinkedHashSet<?>.IdentityWrapper
, потому что это не класс static
. Как отмечено в комментариях. Его можно сделать статическим, а тип ELEM
можно изменить с E
на Object
. Который вы бы оставили также с более хорошим методом equals
:
private static class IdentityWrapper {
public final Object ELEM;
IdentityWrapper(Object elem) {
this.ELEM = elem;
}
@Override
public boolean equals(Object obj) {
return (obj instanceof IdentityWrapper) && ELEM == ((IdentityWrapper) obj).ELEM;
}
@Override
public int hashCode() {
return System.identityHashCode(ELEM);
}
}
Для сайта Коды я предположил бы, что они сделали это больше из силы привычки, а не любой нажимающей технической потребности.
@import
операторы в фактических файлах CSS (не в a <style>
элемент в HTML), служат многим целям, таким как упрощение загрузить и другие файлы CSS. Проект платформа CSS делает это, чтобы позволить Вам легко удалить определенные части платформы, такие как материал типографии или материал сетки.
Конечно, в продуктивной среде, с помощью набора @import
операторы заставлены замолчать взглядом на то, потому что это увеличивает число файлов, которые веб-браузер имеет к выпадающему.
Ничего. Использование a <link>
элемент также имеет преимущество избавления от FOUC.
Править: Использование @import
в другой таблице стилей (.css
файл), может использоваться как #include
в C, но нет никакой причины использовать @import
в a <style>
блок.
Единственная причина использовать это правило сегодня состоит в том, чтобы сделать Ваш CSS более модульным путем разделения его на различные файлы, как библиотеки.
Так, в то время как Ваша страница могла бы связаться с одной таблицей стилей, та таблица стилей может @import другие таблицы стилей для сброса, типографии, и т.д.
Однако это действительно замедляет загрузку Вашей страницы, так как это - просто более последовательные запросы HTTP.
Я соглашаюсь с Andrew. Я также использую импорт для разделения моей CSS логически. Лично мне нравится разделять их в 4: сброс, структура, типография, общая (bgs/borders и т.д.)
В зависимости от человека, делающего его, их стиля и предпочтения, файлы CSS могут также быть разделены разделом страницы, например, header.css, footer.css и т.д.
Одна дополнительная вещь, которую я делаю однако для предотвращения нескольких запросов HTTP, имеют процесс сборки, который объединяется (в порядке импорта) и сжимает файлы CSS для живого развертывания.
Надеюсь, это поможет
Я использую модульный подход к разработке сам и часто заканчиваю с 10 + отдельные файлы CSS. Как Вы знаете, это - довольно решительное количество Запросов HTTP, таким образом, мне нравится использовать Блендер.
Блендер является rubygem, который консолидирует и уменьшает любое количество файлов CSS в единственную таблицу стилей. Это также работает на JavaScript.
Можно определить @media в отдельных таблицах стилей, чтобы только вручить соответствующие правила правильным типам устройства.