[java] 비 정적 메서드에 대한 정적 참조를 만들 수 없습니다.


3 Answers

비 정적 Context 메소드 getText() 의 혼합이 static final String 과 함께 사용될 수없는 이유에 대한 설명이있는 좋은 답변이 이미 있습니다.

묻기 좋은 질문은 : 왜 이것을하고 싶습니까? strings 리소스에서 String 을로드하고 해당 값을 public static 필드에 채우려고합니다. 다른 클래스의 일부가이 클래스에 액세스 할 수 있다고 가정합니다. 그렇다면이를 수행 할 필요가 없습니다. 대신 다른 클래스에 Context 를 전달하고 그 내부에서 context.getText(R.string.TTT) 를 호출하십시오.

public class NonActivity {

    public static void doStuff(Context context) {
        String TTT = context.getText(R.string.TTT);
        ...
    }
}

그리고 이것을 당신의 Activity 에서 불러내는 것 :

NonActivity.doStuff(this);

이렇게하면 public static 필드를 사용할 필요없이 String 리소스에 액세스 할 수 있습니다.

Question

Java로 다국어 애플리케이션 개발하기. R.string 리소스 XML 파일에서 문자열 값을 삽입 할 때 오류 발생 :

public static final String TTT =  (String) getText(R.string.TTT);

이것은 오류 메시지입니다.

오류 : Context 형식에서 비 정적 메서드 getText (int)에 대한 정적 참조를 만들 수 없습니다.

어떻게 이런 일이 생기고 어떻게 해결할 수 있습니까?




비 정적 메소드를 사용하여 정적 변수를 초기화 할 수 없습니다.




변수를 정적이 아니게 만들 수도 있습니다

public final String TTT =  (String) getText(R.string.TTT);

또는 "getText"메소드를 정적으로 만들 수 있습니다 (가능한 경우).




비 정적 메소드에서 정적 변수를 참조 할 수 없습니다. 이를 이해하려면 정적 및 비 정적의 차이점을 이해해야합니다.

정적 변수는 클래스 변수이며, 오직 하나만 인스턴스가있는 클래스에 속하며 처음에만 생성됩니다. 비 정적 변수는 클래스의 객체를 만들 때마다 초기화됩니다.

이제 우리는 new () 연산자를 사용할 때 모든 객체에 대해 정적이 아닌 모든 파일의 복사본을 만들 것입니다. 그러나 정적 필드의 경우는 아닙니다. 따라서 정적이 아닌 메소드에서 정적 변수를 참조하는 경우 컴파일 시간 오류가 발생합니다.






Related