2012-01-05 3 views
0

나는 'this'를 정적으로 사용하여 명령문을 선언하는 방법은 무엇입니까?

public String readFile(int file) 
    { 
     try{ 
     InputStream is = this.getResources().openRawResource(file); 
     byte[] buffer = new byte[is.available()]; 
     System.out.print(is.available()); 
     System.out.print(is.available()); 

     while (is.read(buffer) != -1) 
      ; 
     String text = new String(buffer); 
    return(text); 
     } catch (Exception e) { 
      String Ex=" "; 
      return(Ex); 
     } 
    } 

파일 읽기 방법-에서 ReadFile()이 원시 폴더에서 파일을 읽고 문자열에 저장하고 그것을 돌려 뒤를 Gridactivity라는 활동을 보유하고 있습니다. 이제 여기서 readFile을 정적으로 만들어야합니다. 하지만 여기서 ' InputStream is = this.getResources().openRawResource(file);'문은 비 정적입니다. 다른 클래스와 액티비티에서 액세스 할 수 있도록 정적 함수로 만드는 방법은 무엇입니까?

+0

그렇다면이 정적 readFile() 함수를 어떻게 부르겠습니까? 프로그램의 다른 곳에서'InputStream is this.getResources(). openRawResource (file) '문을 사용해야합니다. 이 함수는 호출자 함수와 readFile() 내부에서 액세스 할 수있는 다른 변수에 저장하거나 readFile을 readFile (InputStream is)으로 쉽게 정의하고 'is'를 전달할 수 있습니다. – aProgrammer

답변

2

수 없습니다.

인스턴스 메서드는 클래스 인스턴스 (예 : Gridactivity 인스턴스)의 컨텍스트 내에서 실행됩니다. this은이 컨텍스트를 참조하는 키워드입니다. 정적 메소드에는 그러한 컨텍스트가 없습니다. 따라서 this은 무엇을 의미합니까?

두 가지 옵션은 정적 메서드를 정적이 아니게 만들거나 정적 메서드에서 정적 메서드로 호출하는 메서드를 static으로 만드는 것입니다. 즉, this 인스턴스에서 필요한 정보를 인수로 명시 적으로 전달해야합니다. 그래서, 대신 : 당신은 인스턴스 객체에 this 점으로 정적 맥락에서 this을 사용하지 않을 수 있습니다

void myStaticMethod(int i) { 
    System.out.println(i); 
} 
2

:

void myInstanceMethod() { 
    System.out.println(this.myInt); 
} 

당신은 뭔가를해야 할 것입니다. 결국,

public static String readFile(Resources resources, int file) { ... } 

을 그리고 당신이 정적의 개념을 이해하지 못하는 것 같다

InputStream is = resources.openRawResource(file); 
0

, 다음과 같이 정적 방법을 달성 할 수

한 가지 방법은 인수로 Resources를 전달하는 것입니다 반원들.

정적 클래스 멤버 (변수, 메서드)는 클래스 수준입니다. 즉, 일반적인 필드와 메서드가 인스턴스와 밀접한 경우에는 꼭 맞지 않습니다. 비 정적 컨텍스트에서 정적 멤버를 사용할 수 있지만 그 반대는 사용할 수 없습니다.

+0

그가 모든 것을 이해한다면 그는 묻지 않을 것입니다. 자원은 본질적으로 세계적인 것입니다. 우리가 인스턴스에서 사용할 수있는 것은 부 자연스러운 것입니다. 따라서 해결 방법이나 그 중 일부가 필요합니다. 여기에 두 가지 제안이있었습니다. 네가 어디 있니? :-) – Gangnus

+0

이봐, 진정해, 난 자바 개발자 야, 안드로이드가 아니야, 나는 그가 정적으로 고민하고 있다는 것을 알았다. 그게 전부다. –

1

간단한 해결 방법은 컨텍스트를 전달하는 것입니다. ,

public static String readFile(Context context, int file) 

을 시도하고 여기에 사용 귀하의 경우에는

String content=GridActivity.readFile(this, 123); 
1

: 기본적으로 당신이 통과

InputStream is = context.getResources().openRawResource(file); 

public static String readFile(Context context, int file) { 
    try{ 
     InputStream is = context.getResources().openRawResource(file); 
[...] 

그리고 여기가 내 코드의 호출입니다 매개 변수로 변수.

(getResources()Context 클래스하는 방법이다).

0

정적 멤버 및 메서드는 주로 클래스 이름과 개체 이름을 사용하여 액세스 할 수 있습니다.

키워드 은 현재 개체를 의미합니다. 정적에 대해 모르는 경우

당신이 직접 할 수 없어이 lnik

+0

오만하지 마라. 그것은 매우 자연스러운 질문이다. 자원은 본질 상 전역 적입니다. 그렇다면 왜 우리는 단지 그것들을 인스턴스에서만 처리 할 수 ​​있습니까? 그것은 클래스/인스턴스 문제가 아니라, 그것은 안드로이드 특정 문제입니다. – Gangnus

+0

@Gangnus 여기에 게시 된 코드에 대해서는 언급하지 않습니다. 질문 제목과 관련이 있어야합니다 제목을 참조하십시오. 내가 맞았나요? –

+0

필자는 저자가 뭔가에 대해 잘 모르는 것보다 자신의 생각을 충분히 정확하게 표현하지 못했다고 생각합니다. BTW, 당신의 대답은 절대 깨끗한 것도 아닙니다. 첫 문장을 이해하는 데 시간이 걸렸습니다. 클래스 객체보다 클래스 - 인스턴스 용어를 더 잘 사용하십시오. Object는 클래스이므로 :-) – Gangnus

0

에서 정보를 읽어 보시기 바랍니다 :하지만, 당신은에서 onCreate 함수에서 그 (것)들로 정적 변수 및 부하 값을 선언 할 수 있습니다. 을 사용할 수 있습니다.

또는

initAllStaticStuff(this). 

로에서 onCreate에서 호출 일부 초기화 기능

initAllStaticStuff(Context context){ 
    someStaticVariable=context.getResources... 
} 

을 그래서 당신은 정적 변수에 필요한 모든 자원을로드 할 수 있습니다 나중에 사용할 수 있습니다.

관련 문제