2015-02-08 3 views
-1

Я спокойно знаком с java, и я даже не уверен, что название имеет смысл. Как я могу получить доступ к файлу внутри onStatus? Я просто пытаюсь записать в файл в этой функции, поэтому в коде ниже «T_file.length()« T_file »не может быть разрешен.заполнить файл внутри внутреннего класса

public static void main(){ 
    foo("file_name"); 
} 

foo(String fileName) 
{ 
     try{ 
     final File T_file = new File (fileName); 
     final FileWriter fw = new FileWriter(fileName); 
     final BufferedWriter bw = new BufferedWriter (fw); 
     }catch (IOException e){} 

     StatusListener listener = new StatusListener(){  
     public void onStatus(Status status){ 
      if (T_file.length() > 100){ 
        System.out.println ("I have access here"); 
        } 
      } 
     } 

} 
+1

Прежде всего, вы импортировали 'java.io.File'? – HavelTheGreat

+0

Да, я импортировал все, что я предполагаю, необходимо. – John

ответ

0

"T_file.length()" The "T_file" не может быть решена

Это потому, что T_file не в рамках onStatus. Вы объявляете T_file в методе foo, но затем создайте новый StatusListener, в котором вы переопределяете onStatus, но компилятор по-прежнему видит StatusListener как другой класс.

Обходным путем было бы объявить переменную globally в вашем классе, а затем получить к ней доступ с указанием имени вашего Class.this.T_file. Вот пример:

public class Foo { 

    File T_file; 

    public static void main(){ 
     new Foo("file_name"); 
    } 

    Foo(String fileName) 
    { 

     T_file = new File (fileName);   

     StatusListener listener = new StatusListener(){  
      public void onStatus(Status status){ 
       if (Foo.this.T_file.length() > 100){ 
        System.out.println ("I have access here"); 
        } 
      } 
     }; 
    } 
} 

Этот пример будет скомпилирован.

Обратите внимание, что я добавил ; в конце StatusListener, иначе он не будет компилироваться.

+0

если я сделаю это «static File T_file» Мне не нужно использовать «class.this.T_file», это допустимое изменение? Я буду вызывать функцию много раз, и по какой-то причине я не могу сделать «class.this.T_file» – John

+0

@ Джон. Да, это тоже сработает. Однако я не понимаю, почему вы не можете делать 'class.this.T_file', но в любом случае. –

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