Предупреждение - Доступ к статическому полю Год - PullRequest
3 голосов
/ 14 января 2011

Я использую Calendar для получения доступа к текущему году.

Это мой код ...

import java.util.Calendar;
Calendar c = c.getInstance();
int year = c.get(c.YEAR);

Код компилируется и работает нормально, но отображаетпредупреждающее сообщение «Предупреждение о доступе к статическому полю». Что-то не так, или я должен сделать что-то лучше?

Ответы [ 4 ]

4 голосов
/ 14 января 2011

Используйте Calendar.getInstance() и Calendar.YEAR, статические поля не должны быть доступны с использованием объектов экземпляра.

1 голос
/ 14 января 2011

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

Пример:

public class AAA{
    public static String HELLO = "HI";
}
public class BBB extends AAA{
    public static String HELLO = "Hello World";
}

AAA test = new BBB();
System.out.println(test.HELLO); //Will print String from AAA 
                                //instead of "Hello World"

Без static будет напечатано «Hello World».

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

1 голос
/ 14 января 2011

Вместо того, чтобы делать Calendar c = c.getInstance();, сделайте это Calendar c = Calendar.getInstance();. Метод getInstance() является статическим методом класса Calendar, поэтому вы получаете предупреждение.

ADD

То же самое касается Calendar.YEAR

0 голосов
/ 06 апреля 2018

Конечно, желательно изменить ваш код. Однако, если вы просто хотите избежать изменений, используйте аннотацию метода: @SuppressWarnings ( "статический доступ")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...