Это неправильно использовать устаревшие методы или классы в Java? - PullRequest
148 голосов
/ 31 мая 2010

Я использую Eclipse для разработки веб-приложения. Только сегодня я обновил свою версию Struts, изменив файл JAR. В некоторых местах я получаю предупреждения о том, что методы устарели, но код работает нормально.

Я хочу знать кое-что

  1. Неправильно ли использовать устаревшие методы или классы в Java?

  2. Что, если я не изменю какой-либо метод и не запусту свое приложение с предупреждениями, которые у меня есть, это создаст какую-либо проблему с производительностью.

Ответы [ 15 ]

2 голосов
/ 31 мая 2010

Это неправильно использовать устаревшие методы или классы в Java? "

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

http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

Почему Thread.stop устарел?

Потому что это небезопасно. Остановка потока приводит к его разблокировке все мониторы, которые он заблокировал. (Мониторы разблокированы как Исключение ThreadDeath распространяется вверх стек.) Если какой-либо из объектов ранее защищены этими мониторами были в противоречивом состоянии, другие Теперь потоки могут просматривать эти объекты в противоречивое состояние. Такие объекты Говорят, что повреждены. Когда темы работать на поврежденных объектах, произвольно поведение может привести. Такое поведение может быть тонким и трудным для обнаружения, или это может быть объявлено. в отличие от других непроверенные исключения, ThreadDeath молча убивает темы; таким образом, пользователь не имеет никакого предупреждения, что его программа может быть поврежден. Коррупция может проявиться сам в любое время после фактического повреждение происходит, даже часы или дни в будущее.


Что, если не изменить какой-либо метод и запустить мое приложение с предупреждениями, которые у меня есть, создаст ли это проблему с производительностью.

Не должно быть никаких проблем с точки зрения производительности. Стандартный API разработан с учетом обратной совместимости, поэтому приложения можно постепенно адаптировать к более новым версиям Java.

2 голосов
/ 31 мая 2010

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

1 голос
/ 27 августа 2010

Конечно, нет - поскольку вся Java становится @Deprecated :-), вы можете свободно использовать их до тех пор, пока длится Java. В любом случае, не буду замечать никаких различий, если это не что-то действительно сломанное. Значение - надо прочитать об этом и затем решить.

Однако в .Net, когда что-то объявляется [устаревшим], сразу же прочитайте об этом, даже если вы никогда не использовали его - у вас есть 50% -ный шанс, что это более эффективно и / или проще в использовании, чем замена: - ))

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

1 голос
/ 27 августа 2010

В Java это @ устарело, в C # это [устарело].

Я думаю, что предпочитаю терминологию C #. Это просто означает, что это устарело. Вы все еще можете использовать его, если хотите, но, возможно, есть лучший способ.

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

То же самое для Java @Deprecated - вы все равно можете использовать метод, но на свой страх и риск - в будущем у него могут быть лучшие альтернативы, и он может даже не поддерживаться.

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

Редактировать: И как указывал Майкл, если причина устаревания связана с недостатком функциональности (или потому, что функциональность не должна даже существовать), то, очевидно, не следует использовать устаревший код. *

0 голосов
/ 09 октября 2016

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

...