Там рассуждает, должны все еще использовать “@import” правило CSS?

При вызове метода IdentityWrapper.equals(). LinkedHashSet не пройдет ELEM, а скорее IdentityWrapper объект.

Вам необходимо ввести дополнительную проверку (instanceOf), а затем развернуть переданный объект для сравнения элементов:

public boolean equals(Object obj) {
    return (obj instanceof IdentityLinkedHashSet<?>.IdentityWrapper) && 
        ELEM == ((IdentityLinkedHashSet<?>.IdentityWrapper) obj).ELEM;
}

Некоторые примечания:

  1. instanceof проверит на ноль, так что вы можете удалить эту проверку полностью.
  2. Вы должны ссылаться на 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);
        }
    }
    
8
задан Dan McGrath 8 February 2010 в 21:27
поделиться

5 ответов

Для сайта Коды я предположил бы, что они сделали это больше из силы привычки, а не любой нажимающей технической потребности.

@import операторы в фактических файлах CSS (не в a <style> элемент в HTML), служат многим целям, таким как упрощение загрузить и другие файлы CSS. Проект платформа CSS делает это, чтобы позволить Вам легко удалить определенные части платформы, такие как материал типографии или материал сетки.

Конечно, в продуктивной среде, с помощью набора @import операторы заставлены замолчать взглядом на то, потому что это увеличивает число файлов, которые веб-браузер имеет к выпадающему.

8
ответ дан 5 December 2019 в 07:37
поделиться

Ничего. Использование a <link> элемент также имеет преимущество избавления от FOUC.

Править: Использование @import в другой таблице стилей (.css файл), может использоваться как #include в C, но нет никакой причины использовать @import в a <style> блок.

11
ответ дан 5 December 2019 в 07:37
поделиться

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

Так, в то время как Ваша страница могла бы связаться с одной таблицей стилей, та таблица стилей может @import другие таблицы стилей для сброса, типографии, и т.д.

Однако это действительно замедляет загрузку Вашей страницы, так как это - просто более последовательные запросы HTTP.

3
ответ дан 5 December 2019 в 07:37
поделиться

Я соглашаюсь с Andrew. Я также использую импорт для разделения моей CSS логически. Лично мне нравится разделять их в 4: сброс, структура, типография, общая (bgs/borders и т.д.)

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

Одна дополнительная вещь, которую я делаю однако для предотвращения нескольких запросов HTTP, имеют процесс сборки, который объединяется (в порядке импорта) и сжимает файлы CSS для живого развертывания.

Надеюсь, это поможет

0
ответ дан 5 December 2019 в 07:37
поделиться

Я использую модульный подход к разработке сам и часто заканчиваю с 10 + отдельные файлы CSS. Как Вы знаете, это - довольно решительное количество Запросов HTTP, таким образом, мне нравится использовать Блендер.

Блендер является rubygem, который консолидирует и уменьшает любое количество файлов CSS в единственную таблицу стилей. Это также работает на JavaScript.

Можно определить @media в отдельных таблицах стилей, чтобы только вручить соответствующие правила правильным типам устройства.

0
ответ дан 5 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

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