Худшая практика Java найдена, по вашему опыту? [закрытый]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

28
задан 4 revs, 2 users 65% 23 May 2017 в 12:02
поделиться

23 ответа

Я должен был поддержать код Java, где большая часть Обработки исключений была похожа:

catch( Exception e ) {}
96
ответ дан asalamon74 28 November 2019 в 02:12
поделиться

Подобный Вашему, но продвинутый далее:

Использование класса (статические) переменные, когда запрос определил объем переменной, были корректной вещью сделать в действии Struts.: O

Это было на самом деле развернуто в производстве в течение нескольких месяцев и никого когда-либо, замечал вещь, пока я не рассматривал код один день.

1
ответ дан Jack Leow 28 November 2019 в 02:12
поделиться

@madlep Точно! Части сообщества Java действительно идут за борт с экстремальными абстракциями и безумно глубокими иерархиями классов. У Steve Yegge было хорошее сообщение в блоге об этом несколько лет назад: Выполнение в Королевстве Существительных .

2
ответ дан albertb 28 November 2019 в 02:12
поделиться

Абстракция функциональности в класс библиотеки, который никогда не будет снова использоваться, поскольку это настолько характерно для исходной проблемы, решаемой . Следовательно окончание с огромным количеством классов библиотеки, которые никто никогда не будет использовать и которые абсолютно неясный две полезных утилиты Вы на самом деле делаете , имеет (т.е. CollectionUtils и IOUtils).

... паузы для дыхания...

8
ответ дан oxbow_lakes 28 November 2019 в 02:12
поделиться

абстракция Излишества объектно-ориентированного проектирования (Удаленный так 10k только).

Тот же ответ на подобном потоке (относится ко всем языкам, которые разрешают объектно-ориентированное проектирование).

4
ответ дан Community 28 November 2019 в 02:12
поделиться

Разделение на подклассы, когда Вы, как не предполагается, например, вместо того, чтобы использовать состав, агрегирование, и т.д.

Редактирование: Это - особый случай молоток .

14
ответ дан Community 28 November 2019 в 02:12
поделиться

Наш интерн использовал static модификатор для хранения в настоящее время зарегистрированного пользователя в приложении Шва.

 class Identity{
    ...
    public static User user; 
    ...
 }

 class foo{

    void bar(){
       someEntity.setCreator(Identity.user); 
    }

 }

, Конечно, это работало, когда он протестировал его:)

11
ответ дан jb. 28 November 2019 в 02:12
поделиться

Смешная мания OO с классом hierachies 10 + уровни глубоко.

Это - то, куда названия как DefaultConcreteMutableAbstractWhizzBangImpl происходят от. Просто попытайтесь отладить такой код - Вы будете свистеть вверх и вниз по дереву класса в течение многих часов.

18
ответ дан madlep 28 November 2019 в 02:12
поделиться

Худшая практика Java, которая охватывает почти всех других: Глобальное изменяемое состояние.

19
ответ дан Apocalisp 28 November 2019 в 02:12
поделиться

Я ненавижу его, когда люди создают интерфейсы только для зависания ряда констант на:

public interface InterfaceAntiPattern {
  boolean BAD_IDEA = true;
  int THIS_SUCKS = 1;
}

— Интерфейсы для определения поведенческих контрактов, не механизма удобства для включения констант.

24
ответ дан John Topley 28 November 2019 в 02:12
поделиться

Не связанный строго с Java, но вызыванием дорогой функции много раз вместо того, чтобы хранить результат, когда Вы будете знать, это не изменится. Пример:

if (expensiveFunction() > aVar)
    aVar = expensiveFunction();
for (int i=0; i < expensiveFunction(); ++i)
    System.out.println(expensiveFunction());
20
ответ дан Claudiu 28 November 2019 в 02:12
поделиться
if{
 if{
  if{
   if{
    if{
     if{
      if{
       if{
         ....
25
ответ дан Steve B. 28 November 2019 в 02:12
поделиться

Как только я обнаружил исключение «singleton»:

class Singletons {
    public static final MyException myException = new MyException();
}

class Test {
    public void doSomething() throws MyException {
        throw Singletons.myException;
    }
}

Один и тот же экземпляр исключения генерировался каждый раз ... с точно такая же трассировка стека, которая не имела ничего общего с реальным потоком кода: - (

38
ответ дан 28 November 2019 в 02:12
поделиться

Мой любимый алгоритм сортировки, любезно предоставленный бригадой седобородых:

List needsToBeSorted = new List ();
...blah blah blah...

Set sorted = new TreeSet ();
for (int i = 0; i < needsToBeSorted; i++)
  sorted.add (needsToBeSorted.get (i));

needsToBeSorted.clear ();
for (Iterator i = sorted.iterator (); i.hasNext ();)
  needsToBeSorted.add (i.next ());

По общему признанию, это сработало, но в конце концов я убедил его, что, возможно, Collections.sort будет намного проще.

3
ответ дан 28 November 2019 в 02:12
поделиться

Однажды мне пришлось исследовать веб-приложение, в котором ВСЕ состояние сохранялось на веб-странице, отправляемой клиенту, а не состояние на веб-сервере.

Хотя хорошо масштабируется :)

9
ответ дан 28 November 2019 в 02:12
поделиться

Шесть действительно плохих примеров;

  • Вместо сообщения об ошибках просто System.exit без предупреждения. например
    if (properties.size ()> 10000) System.exit (0); глубоко в библиотека.
  • Использование строковых констант как замки. например, synchronized ("one") {} .
  • Блокировка изменяемого поля. например синхронизированный (объект) {объект = ...; } .
  • Инициализация статических полей в конструкторе.
  • Запуск исключения только для получения трассировки стека. например, попробуйте {Integer i = null; i.intValue (); } catch (NullPointerException e) {e.printStackTrace (); } .
  • Создание бессмысленного объекта, например new Integer (text) .intValue () или еще хуже, new Integer (0) .getClass ()
28
ответ дан 28 November 2019 в 02:12
поделиться

API, требующий от вызывающего абонента:

Foobar f = new Foobar(foobar_id);
f = f.retrieve();

Было бы лучше использовать любое из следующего:

Foobar f = Foobar.retrieve(foobar_id);

или

Foobar f = new Foobar(foobar_id); // implicit retrieve

или

Foobar f = new Foobar();
f.retrieve(foobar_id); // but not f = ...
8
ответ дан 28 November 2019 в 02:12
поделиться

Ошибка младших программистов: излишнее использование переменных-членов вместо локальных.

Пример Java EE:

Запуск потоков в сервлетах или EJB (например, для запуска асинхронной обработки задач).

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

Мы реорганизовали это, заставив сервлет поместить сообщение в очередь JMS и написать управляемый сообщениями bean-компонент. для обработки задачи асинхронной обработки.

0
ответ дан 28 November 2019 в 02:12
поделиться

Создание обработчиков и мутаторов для всех частных переменных, не задумываясь, иногда автоматически.

Инкапсуляция была изобретена не просто так .

7
ответ дан 28 November 2019 в 02:12
поделиться

Defining the logic using exceptions where a for-loop or any form of loop would suffice.

Example:

while(i < MAX_VALUE)
{
   try
   {
      while(true)
      {
         array[j] = //some operation on the array;
         j++;  

      }
   }
   catch(Exception e)
   {
      j = 0;
   }
}

Serious, I know the guy who wrote this code. I reviewed it and corrected the code :)

2
ответ дан 28 November 2019 в 02:12
поделиться

Не закрывать соединения с базой данных, дескрипторы файлов и т.д. в finally {}

9
ответ дан 28 November 2019 в 02:12
поделиться

Excesive focuse on re-using objects that leads to static things everywhere. (Упомянутое повторное использование может быть очень полезным в некоторых ситуациях.)

Java имеет встроенный сборщик мусора, если вам нужен объект, создайте новый.

1
ответ дан 28 November 2019 в 02:12
поделиться

Я видел эту строку пару минут назад:

Short result = new Short(new Integer(new Double(d).intValue()).shortValue());
2
ответ дан 28 November 2019 в 02:12
поделиться
Другие вопросы по тегам:

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