Компилирую такой код
public class MyClass {
/**
An entry point for entire program
@param args command line arguments
@version 1.0 SNAPSHOT
@see <a href='https://www.google.com'>google.com</a>
*/
public static void main(String[] args) {
System.out.println("Starting ...");
printHelloWorld();
}
@Deprecated()
public static void printHelloWorld() {
System.out.println("Hello world!");
}
}
командой javac MyClass.java
. Версия компилятора 11.0.2.
Однако никаких сообщений о использовании deprecated метода не получаю. Компилируется без всяких сообщений. После декомпиляции полученного class-файла получаю
import java.io.PrintStream;
public class MyClass
{
public MyClass()
{
}
public static void main(String args[])
{
System.out.println("Starting ...");
printHelloWorld();
}
/**
* @deprecated Method printHelloWorld is deprecated
*/
public static void printHelloWorld()
{
System.out.println("Hello world!");
}
}
Аннотация @Deprecated
превратилась в тег javadoc-a. Тоже немного непонятно почему. Если это сделал декомпилятор из-за наличия аннотации, то почему он её саму убрал? Декомпилировал с помощью jad.
Почему компилятор не выдает предупреждений?
Однако никаких сообщений о использовании deprecated метода не получаю.
Попробуйте вынести метод printHelloWorld
в другой класс и использовать его. Тогда предупреждение появится. Пометка об устаревании имеет смысл только в отношении публичного API, а не к использованию классом своих собственных методов.
Аннотация @Deprecated превратилась в тег javadoc-a. Тоже немного непонятно почему. Если это сделал декомпилятор из-за наличия аннотации, то почему он её саму убрал?
Вероятно ваш декомпилятор её теряет, так как в байткоде она остаётся:
public static void printHelloWorld();
descriptor: ()V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello world!
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
LineNumberTable:
line 63: 0
line 64: 8
Deprecated: true
RuntimeVisibleAnnotations:
0: #18() // Ljava/lang/Deprecated;
Виртуальный выделенный сервер (VDS) становится отличным выбором
При изучении Stream API, часто встречал употребление выражений lazy и eager операторы, но нигде толком не мог найти нормальное определение этих понятий
Только начала разбираться со SpringПытаюсь добавить данные в БД и отобразить их списком на страничке
Передо мной предстала следующая задача: написать некоторый софт на Java, с применением GUI на JavaFXодной из функций будущей программы должна быть...