2011-01-14 4 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

정적 필드가 객체의 런타임 유형이 아닌 컴파일 타임 유형을 사용하여 액세스되기 때문에 경고하기 때문에 버그를 찾기가 어려울 수 있습니다.

예 : 그것은에 "Hello World"를 인쇄 할 static없이

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" 

.

이러한 버그를 방지하려면 인스턴스를 사용하는 대신 선언 된 클래스로 항상 정적 변수에 액세스해야합니다. 컴파일러는 class-name을 사용하지 않을 이유가 없으므로 경고합니다.