2011-01-14 3 views
3

Я использую Calendar, чтобы получить доступ к текущему году.Предупреждение - Доступ к статическому полю Год

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

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

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

ответ

4

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

+1

Это плохая практика, потому что она делает менее очевидным, что вы обращаетесь к статическому полю. –

+1

Вы пропустили более очевидный 'c.getInstance()'. –

+0

Кто-то еще упомянул об этом в своих ответах, и мой ответ довольно общий, достаточно уверен, что любой может сделать логический шаг. –

1

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

ADD

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

1

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

Пример:

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".

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

Смежные вопросы