У меня есть несколько моментов, чтобы добавить к превосходный ответ Брайана Гетца .
. Очень часто возвращать Stream из вызова метода стиля «getter». См. Страницу использования потока использования в Java 8 javadoc и найдите «методы ..., которые возвращают поток» для пакетов, отличных от java.util.Stream
. Эти методы обычно относятся к классам, которые представляют или могут содержать несколько значений или агрегатов чего-либо. В таких случаях API обычно возвращают коллекции или массивы из них. По всем причинам, которые Брайан отметил в своем ответе, очень гибко добавлять сюда методы Stream-return. У многих из этих классов уже есть методы, основанные на коллекции или массиве, поскольку классы предшествуют API Streams. Если вы разрабатываете новый API, и имеет смысл предоставлять методы Stream-return, возможно, нет необходимости добавлять методы возврата коллекции.
Брайан упомянул стоимость «материализации» значения в коллекцию. Чтобы усилить этот момент, на самом деле существуют две затраты: стоимость хранения значений в коллекции (выделение и копирование памяти), а также стоимость создания значений в первую очередь. Последнюю стоимость часто можно уменьшить или избежать, воспользовавшись стремлением Stream к лени. Хорошим примером этого являются API-интерфейсы в java.nio.file.Files
:
static Stream lines(path)
static List readAllLines(path)
Не только readAllLines
должны хранить все содержимое файла в памяти, чтобы сохранить его в списке результатов, должен прочитать файл до самого конца, прежде чем он вернет список. Метод lines
может вернуться почти сразу после того, как он выполнил некоторую настройку, оставив чтение файла и прерывание строки до тех пор, пока это будет необходимо - или совсем нет. Это огромное преимущество, если, например, вызывающий пользователь интересуется только в первых десяти строках:
try (Stream lines = Files.lines(path)) {
List firstTen = lines.limit(10).collect(toList());
}
Конечно, значительное пространство памяти может быть сохранено, если вызывающий фильтр фильтрует поток, чтобы возвращать только строки, соответствующие шаблон и т. д.
. Идиома, которая, кажется, появляется, - это имя методов возврата потока после множественного числа имени того, что оно представляет или содержит, без префикса get
. Кроме того, в то время как stream()
является разумным именем для метода возврата потока, когда есть только один возможный набор значений, возвращаемых, иногда есть классы, которые имеют агрегаты нескольких типов значений. Например, предположим, что у вас есть объект, содержащий как атрибуты, так и элементы. Вы можете предоставить два API-интерфейса, возвращающих поток:
Stream attributes();
Stream elements();
Чтобы сделать это с таймаутом
//onOverlayOpen
this.overlay.classList.add('overlay--blocked');
setTimeout(() => {
this.overlay.classList.remove('overlay--blocked');
}, 350);
//CSS
.overlay--blocked {
pointer-events: none;
}
Вы можете использовать ondblclick ( https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/ondblclick ), чтобы вернуть false, но это похоже на Проблема UX, когда ваши кнопки находятся точно в одном положении. Хотя, если пользователю удастся щелкнуть две кнопки подряд, это, вероятно, не считается правильным двойным щелчком, поэтому первое решение может не сработать.
Я бы действительно предложил переместить вторую кнопку в другую позицию в модальном или для перемещения самого модала.