Используя частные статические методы [дубликат]

Используйте exists или join:

select b.*
from b
where exists (select 1
              from tablea a
              where b.name regexp concat(a.name, '[0-9]*')
             );

Так вы указали регулярное выражение. Если вы не хотите 'First', используйте:

where exists (select 1
              from tablea a
              where b.name regexp concat('^', a.name, '[0-9]+')
             );
37
задан Michael Myers 26 March 2009 в 14:11
поделиться

7 ответов

A private static метод отдельно не нарушает ООП по сути, но когда у Вас есть много этих методов на классе, для которых не нужно (и не может*), поля экземпляра доступа, Вы не программируете в OO путь, потому что "объект" подразумевает состояние + операции на том состоянии, определенном вместе. Почему Вы помещаете эти методы на тот класс, если им не нужно никакое состояние?

(*) = В принципе, из-за видимости уровня класса в Java, статический метод для класса имеет доступ к полям экземпляра объекта того класса, например:

class Test
{
  int field = 123;

  private static void accessInstance(Test test)
  {
    System.out.println(test.field);
  }
}

Необходимо передать в ссылке на экземпляр (this указатель), самостоятельно, конечно, но затем Вы по существу имитируете методы экземпляра. Просто упомянув это для полноты.

39
ответ дан eljenso 27 November 2019 в 04:41
поделиться

Как упомянуто выше, частные статические методы часто полезны для организации снова использованной логики и сокращения/устранения повторного кода. Я удивлен, что не заметил упоминания о производительности в этом обсуждении. От Renaud Waldura 'Финал Word на Финале':

(Примечание, частные статические методы являются неявно окончательными),

"Так как последний метод только реализован в классе объявления, нет никакой потребности динамично отправить вызов последнему методу, и статический вызов может использоваться вместо этого. Компилятор может испустить прямой вызов метода, обойдя полностью обычную виртуальную процедуру вызова метода. Из-за этого последние методы являются также кандидатами на встраивание Своевременным компилятором или подобным инструментом оптимизации. (Помните, частные / статические методы являются уже окончательными, поэтому всегда рассматриваемые для этой оптимизации.)"

Проверьте целую бумагу: http://renaud.waldura.com/doc/java/final-keyword.shtml

21
ответ дан tyler 27 November 2019 в 04:41
поделиться

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

4
ответ дан Michael Borgwardt 27 November 2019 в 04:41
поделиться

Я не обязательно вижу какую-либо настоящую проблему с тем, что Вы делаете, но мой первый вопрос состоял бы в том, если метод не требует доступа ни к каким полям экземпляра, то, что это делает в том классе во-первых?

2
ответ дан Eric Petroelje 27 November 2019 в 04:41
поделиться

Это - вопрос вкуса, но я делаю методы, которые не реагируют на состояние в объектных помехах. Таким образом, я не должен переписывать код, если для статической функции нужна схожая функциональность. Функция сортировки была бы хорошим примером такого случая.

0
ответ дан soulmerge 27 November 2019 в 04:41
поделиться

Я склонен не использовать частные статические методы. Я действительно использую общедоступные статические методы и группирую их в классы Util для продвижения повторного использования.

0
ответ дан digitalsanctum 27 November 2019 в 04:41
поделиться

Частные статические методы могут, например, воздействовать на частных статических членов своего класса. Это может быть использовано, чтобы инкапсулировать и объединить определенный класс определенные операции.

Главный недостаток использования статических методов является, по-моему, тем, что каждый выбрасывает возможность переопределить. Так как классы в Java не похожи, скажем, на классы в Smalltalk, Вы не можете переопределить статические методы.

Так как Ваш вопрос касается частных статических методов, переопределение вне опции так или иначе.

Я склонен использовать статические методы только в случае служебных классов (как java.lang. Математика) или шаблоны как Шаблон "одиночка". Все они требуют более высокой видимости, чем частный, потому что они представляют услуги, предоставленные их классом другим.

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

0
ответ дан 27 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

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