На самом деле, вы можете.
Тот же исходный код до 1.5, скомпилированный с тегом JavaDoc @deprecated или без него, создает файлы классов, которые отличаются парой байтов:
00000000 ca fe ba be 00 00 00 34 00 0a 07 00 02 01 00 02 |.......4........|
00000010 43 30 07 00 04 01 00 10 6a 61 76 61 2f 6c 61 6e |C0......java/lan|
00000020 67 2f 4f 62 6a 65 63 74 01 00 06 3c 69 6e 69 74 |g/Object...<init|
00000030 3e 01 00 03 28 29 56 01 00 04 43 6f 64 65 0a 00 |>...()V...Code..|
00000040 03 00 09 0c 00 05 00 06 00 20 00 01 00 03 00 00 |......... ......|
00000050 00 00 00 01 00 00 00 05 00 06 00 01 00 07 00 00 |................|
00000060 00 11 00 01 00 01 00 00 00 05 2a b7 00 08 b1 00 |..........*.....|
00000070 00 00 00 00 00 |.....|
против
00000000 ca fe ba be 00 00 00 34 00 0b 07 00 02 01 00 02 |.......4........|
00000010 43 30 07 00 04 01 00 10 6a 61 76 61 2f 6c 61 6e |C0......java/lan|
00000020 67 2f 4f 62 6a 65 63 74 01 00 06 3c 69 6e 69 74 |g/Object...<init|
00000030 3e 01 00 03 28 29 56 01 00 04 43 6f 64 65 0a 00 |>...()V...Code..|
00000040 03 00 09 0c 00 05 00 06 01 00 0a 44 65 70 72 65 |...........Depre|
00000050 63 61 74 65 64 00 20 00 01 00 03 00 00 00 00 00 |cated. .........|
00000060 01 00 00 00 05 00 06 00 01 00 07 00 00 00 11 00 |................|
00000070 01 00 01 00 00 00 05 2a b7 00 08 b1 00 00 00 00 |.......*........|
00000080 00 01 00 0a 00 00 00 00 |........|
Если взглянуть на спецификацию JVM, глава 4 , в структуре ClassFile
есть атрибут Deprecated
( §4.7.15 ).
Существуют инструменты, способные определить, является ли класс устаревшим:
- любой из современных IDE
- jad (декомпилятор Java), с закрытым исходным кодом, чисто нативный код.
- jclasslib проект (GPLv2) от Инго Кегеля .
Вы можете либо самостоятельно реализовать структуру ClassFile
, либо, если у вас нет ничего против GPLv2, взглянуть на org.gjt.jclasslib.structures.AttributeInfo
class.