2013-06-24 6 views
2

Я хотел бы отметить использование определенных методов, предоставляемых JRE как устаревшие. Как мне это сделать?Устаревший метод JRE JRE

+0

Зачем вам это нужно? –

+0

Убедитесь, что люди не используют реализацию Java и используют мою реализацию с этого момента. – snihalani

+1

Является ли это проблемой X-Y? – erickson

ответ

10

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

1

В каком контексте? Вы хотите, чтобы вы могли легко настроить вашу среду IDE на запрет использования определенного API? Или вы пытаетесь диктовать миру, какие API вы запрещаете? Или вы пытаетесь что-то сделать во время выполнения?

Если первый случай, Eclipse и я предполагаю, что другие IDE, вы можете пометить любой API как запрещенный, обескураженный или доступный на уровне пакета или класса.

Если вы имеете в виду второе, вы не можете, конечно. Это было бы глупо.

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

5

Вы не можете осуждать методы JRE, но вы можете добавлять предупреждения или даже компилировать ошибки в свою систему сборки, то есть используя AspectJ или запрещать использование данных методов в среде IDE.

Например, в Eclipse: Перейти к Свойства проекта -> Java Compiler -> Ошибки предупреждения, затем включить конкретные параметры проекта, Expand Устаревшие и restrited API, категория "Запретное эталонную (правило Асесс)"

Очевидно, вы могли бы применить или переопределить класс, добавляя аннотацию @Deprecated, но это не чистое решение.

1

Вы можете сделать это, если и только если вы строите свою собственную JRE! В этом случае просто добавьте @Deprecated над соответствующим блоком кода! Но если вы используете JRE Oracle, вам негде это сделать!

+0

Если вы отказываетесь от API самостоятельно, у вас нет JRE. То есть вы не можете назвать его Java. – erickson

+0

Да, вы правы! Это моральный ответ! –

2

Добавьте такие ограничения в свои правила кодирования и соблюдайте их как часть процесса проверки кода.

1

Вы можете скомпилировать свою собственную версию класса и добавить его в путь к классу загрузки или каталог lib/ext. http://docs.oracle.com/javase/tutorial/ext/basics/install.html Это изменит JDK и JRE.

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

1

Snihalani: Просто так, что я получаю это прямо ...

Вы хотите «принизить методов в JRE», чтобы «убедившись, что люди не используют реализацию Java и использовать мою реализацию теперь «. ?

Прежде всего: вы ничего не можете изменить в JRE, и вам не разрешено, это свойство Oracle. Уу может изменить что-то локально, если вы хотите решить проблему, но это просто будет в вашей локальной JRE, а не в тех, которые можно загрузить с веб-страницы Oracle.

К тому же, никто не имеет вашей реализации, так как мы можем использовать его в любом случае?Реализации, предоставляемые Oracle, делают именно то, что они должны делать, и когда обнаружен дефект/ошибка/..., он будет исправлен или заменен новым методом (после чего исходный метод становится устаревшим).

Но, что в основном меня беспокоит, это то, что вы идете и меняете реализации с чем-то, с чем вы столкнулись. Напоминает мне довольно много фишинга и таких методов, когда мы запускаем ваш код, не зная, что он делает, даже не зная, что мы запускаем ваш код. В конце концов, если у вас будет доступ к исходному коду и «постройте» JRE, то что вам мешает вам изменить код в исходном методе?

Устаревшие является для автора сказать: «Да ... Я сделал это в прошлом, но мне кажется, что есть проблемы с методом только для того, чтобы не изменить поведение существующих приложений. используя этот метод, я не изменю этот метод, скорее отмечаю его как устаревший и добавлю метод, который решает эту проблему ».

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