Устаревшие методы не просто удаляются или переопределяются по-разному, потому что иногда подпись и расположение метода были такими же неправильными, как и его функциональность.
Рассмотрим класс
public class Math {
public static int add(int a, int b) { return a + b; }
public static int randomNumber() { return 12; }
}
Теперь кто-то понимает, что реализация randomNumber
неисправна, потому что на самом деле возвращает постоянное значение. Кроме того, было бы неплохо включить upperBound
. И это не имеет ничего общего с Math
и, вероятно, следует перенести в класс Random
вместо:
public class Math {
public static int add(int a, int b) { return a + b; }
@Deprecated
public static int randomNumber() { return 12; }
}
public class Random {
public static int randomNumber(int upperBound) { return /* some complex implementation */; }
}
То, что вы всегда должны делать, когда маркировка на вопрос, как @Deprecated
это включить альтернативный метод следует использовать вместо этого.
И не следует удалять или изменять первоначально неисправную функциональность, прежде чем не дать льготный период для разработчиков, чтобы реагировать на него, то есть отойти от старого метода и использовать новый. Поскольку простое удаление или изменение без предупреждения просто сломало бы код всех, кто до недавнего времени, возможно, не осознавал свое фактическое ошибочное поведение.
Конечная нота: Что касается вашего заявления
Это было бы гораздо лучше, и не будет раздражать программистов, которые, как правило, чтобы использовать устаревшие методы, со списком предупреждений.
Это очень плохая привычка с самого начала. В определении сделанного, где я работаю, написано, что код должен быть предупрежден бесплатным для выхода. Нам просто не разрешено использовать устаревшие методы. Если вы просто проигнорируете предупреждения и устаревшее сообщение, нет ничего, что мог бы сделать автор фреймворка. Разработчик, который не хочет адаптироваться, может продолжать работу, получить исходный код устаревшего метода и скопировать его туда, где он ему нужен.@Deprecated
- это функция для разработчиков, которые знают об изменениях структуры и готовы и способны справиться с ними. Остальное просто не имеет значения. @Deprecated
будет удален в какой-то момент, нарушив код тех, кто не хотел меняться.
Дополнение о примере: Давайте предположим, что мы имеем randomNumberBetween0And1
, который неправильно реализован и всегда возвращает значения между 1 и 2. Пользователи этой функции есть в курсе, что ошибка изменилась их использование метода быть randomNumberBetween0And1() - 1
к компенсировать ошибку. Если вы теперь идите вперед и измените реализацию на правильную, фактически вернув что-то между 0 и 1, которое нарушит код всех, кто ранее компенсировал вашу ошибку с помощью вычитания 1 - эти люди теперь получат значение от -1 до 0 вернулся. То есть не что бы вы хотели.
Я голосующий, чтобы закрыть этот вопрос как не по теме, потому что речь идет не о конкретной проблеме программирования. Вопросы относительно обоснования значения устаревшего атрибута лучше подходят для http://programmers.stackexchange.com/ –
@JeroenVannevel это [уже задано и ответили] (http://programmers.stackexchange.com/q/72222/ 31260) там – gnat