Java: Объяснение Класса объекта, не будучи объявленным краткий обзор

Вот несколько изменений, которые вы можете сделать

Вместо того, чтобы делать

document.querySelector("#selectionButton span:first-child").textContent, вы можете сделать

let getButtonSpan = document.getElementById('selectionButton').firstElementChild;

, это даст первый потомок внутри этого элемента dom с идентификатором selectionButton

Вы можете использовать forEach, хотя обычный цикл for одинаково хорош. Используйте аргумент forEach, чтобы получить якорный тег dom & amp; добавить слушатель события к нему. Нажмите на него, чтобы получить текст, используя innerHTML & amp; установите его для первого потомка кнопки.

Кроме getAttribute, вы также можете использовать набор данных для извлечения свойства data из домена.

В вашем коде, который заменяет jquery, вы используете $(this).data("parentid"), который нарушает вашу цель

let getButtonSpan = document.getElementById('selectionButton').firstElementChild;
document.getElementById('selectionList').querySelectorAll('a').forEach(function(item) {
  item.addEventListener('click', function() {
    getButtonSpan.innerHTML = item.innerHTML;
    let selectedParentID = item.dataset.parentid;
    let selectedType = item.dataset.type;
    if (selectedParentID && selectedType) {
      doSomeThing(selectedParentID, selectedType);
    }
  })

})

function doSomeThing(a, b) {
  console.log(`selectedParentID : ${a} & selectedType :${b}`)
}

20
задан Ande TURNER 4 April 2009 в 13:57
поделиться

7 ответов

Ande, я думаю, что Вы приближаетесь к этому - игре слов, НЕ предназначенной - с ненужной степенью абстракции. Я думаю это (по моему скромному мнению), ненужный уровень абстракции - то, что вызывает "проблему" здесь. Вы, возможно, приближаетесь к этому от математического теоретического подхода, где многие из нас приближаются к этому от "программиста, пытающегося решить проблемы" подход. Я полагаю, что это различие в подходе вызывает разногласия.

Когда программисты смотрят на практичность и как на самом деле реализовать что-то, существует неоднократно, когда Вам нужен некоторый полностью произвольный объект, фактический экземпляр которого полностью не важен. Это просто не может быть пустым. Примером, который я дал в комментарии другому сообщению, является реализация *Set (* == Hash или Concurrent или введите предпочтительный), который обычно делается при помощи поддержки *Map и использование Map ключи как Набор. Вы часто не можете использовать null как Map значение, поэтому что обычно делается, должно использовать помехи Object экземпляр как значение, которое будет проигнорировано и никогда не использоваться. Однако некоторый непустой заполнитель необходим.

Другое общее использование с synchronized ключевое слово, где некоторые Object необходим для синхронизации на, и Вы хотите удостовериться, что Ваш объект синхронизации является полностью частным для предотвращения мертвой блокировки, где различные классы неумышленно синхронизируются на той же блокировке. Очень общая идиома должна выделить a private final Object использовать в классе в качестве блокировки. Честно говоря, с Java 5 и java.util.concurrent.locks.Lock и связанные дополнения, эта идиома в известной мере менее применима.

Исторически, было довольно полезно в Java иметь Object будьте instantiable. Вы могли сделать правильное замечание, что с небольшими изменениями в дизайне или с небольшими изменениями API, это больше не будет необходимо. Вы, вероятно, корректны в этом.

И да, API, возможно, обеспечил a Placeholder класс, который расширяется Object не добавляя ничего вообще, чтобы использоваться в качестве заполнителя в целях, описанных выше. Но - если Вы расширяетесь Object но ничего не добавляя, каково значение в классе кроме разрешения Object быть абстрактным? Математически, теоретически, возможно, можно было найти значение, но практично, какое значение оно добавит, чтобы сделать это?

Существуют времена в программировании, где Вам нужны объект, некоторый объект, любой конкретный объект, который не является несуществующим, что-то, через что можно выдержать сравнение == и/или .equals(), но Вам просто не нужна никакая другая функция к этому объекту. Это существует только для служения в качестве уникального идентификатора и иначе абсолютно ничего не делает. Object удовлетворяет эту роль отлично и (по моему скромному мнению) очень чисто.

Я предположил бы, что это - часть причины почему Object не был объявлен кратким обзором: Для него непосредственно полезно не быть.

14
ответ дан 29 November 2019 в 23:41
поделиться

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

Понятие класса, являющегося абстрактным, имеет четко определенное значение, которое не применяется к Объекту.

4
ответ дан 29 November 2019 в 23:41
поделиться

Object полезно, даже если это не имеет никакого состояния или поведения характерными для него.

Одним примером было бы свое использование в качестве универсальной защиты, это используется для синхронизации:

public class Example {
    private final Object o = new Object();

    public void doSomething() {
        synchronized (o) {
            // do possibly dangerous stuff
        }
    }
}

В то время как этот класс немного прост в своей реализации (не очевидно здесь, почему полезно иметь явный объект, Вы могли просто объявить метод synchronized) существует несколько случаев, где это действительно полезно.

17
ответ дан 29 November 2019 в 23:41
поделиться

Можно инстанцировать Object для блокировок синхронизации:

Object lock = new Object();

void someMethod() {
  //safe stuff
  synchronized(lock) {
     //some code avoiding race condition
  }
}

void someOtherMethod() {
  //safe code
  synchronized(lock) {
    //some other stuff avoiding race condition
  }
}
3
ответ дан 29 November 2019 в 23:41
поделиться

Я не уверен, что это - причина, но она позволяет (или позволенный, поскольку существуют теперь лучшие способы сделать ее) для Объекта, который будет использоваться в качестве блокировки:

Object lock = new Object();

....


synchronized(lock)
{
}
2
ответ дан 29 November 2019 в 23:41
поделиться

Вы никогда не знаете, когда Вы могли бы хотеть использовать простой объект в качестве заполнителя. Думайте о нем так же как наличие нуля в числовой системе (и пустой указатель не работает на это, так как пустой указатель представляет отсутствие данных).

1
ответ дан 29 November 2019 в 23:41
поделиться

Как Объект является больше оскорбительным, чем пустой указатель?

Это делает хороший маркер места (как хороший как пустой указатель так или иначе).

Кроме того, я не думаю, что это был бы хороший дизайн для создания объектного краткого обзора без абстрактного метода, который должен пойти на него.

Я не говорю, что пустой указатель является лучше не бывает - я прочитал статью на днях "Изобретателя", обсуждающего стоимость/значение наличия понятия пустого указателя... (Я даже не думал, что пустой указатель был inventable! Я предполагаю, что кто-то где-нибудь мог утверждать, что изобрел нуль..) просто, что способность инстанцировать Объекта не хуже, чем способность передать пустой указатель.

2
ответ дан 29 November 2019 в 23:41
поделиться
Другие вопросы по тегам:

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