Note that there are some explanatory texts on larger screens.

plurals
  1. POJava: static-non-static-this problem
    text
    copied!<pre><code>$ javac TestFilter.java TestFilter.java:19: non-static variable this cannot be referenced from a static context for(File f : file.listFiles(this.filterFiles)){ ^ 1 error $ sed -i 's@this@TestFilter@g' TestFilter.java $ javac TestFilter.java $ java TestFilter file1 file2 file3 </code></pre> <p><strong>TestFilter.java</strong></p> <pre><code>import java.io.*; import java.util.*; public class TestFilter { private static final FileFilter filterFiles; // STATIC! static{ filterFiles = new FileFilter() { // Not Static below. When static, an error: // "accept(java.io.File) in cannot implement // accept(java.io.File) in java.io.FileFilter; // overriding method is static" // // I tried to solve by the change the problem at the bottom. public boolean accept(File file) { return file.isFile(); } }; } // STATIC! public static void main(String[] args){ HashSet&lt;File&gt; files = new HashSet&lt;File&gt;(); File file = new File("."); // IT DID NOT WORK WITH "This" but with "TestFilter". // Why do I get the error with "This" but not with "TestFilter"? for(File f : file.listFiles(TestFilter.filterFiles)){ System.out.println(f.getName()); files.add(f); } } } </code></pre> <p><strong>Update: define "current object"</strong></p> <p>Constructor created, object created but the <code>this</code> does not refer to the <em>current object</em> "test". It works when I change this to "test" but it does not work with "this". Why?</p> <pre><code>$ javac TestFilter.java TestFilter.java:28: non-static variable this cannot be referenced from a static context for(File f : this.getFiles()){ ^ 1 error $ cat TestFilter.java import java.io.*; import java.util.*; public class TestFilter { private static final FileFilter filterFiles; private HashSet&lt;File&gt; files; static{ filterFiles = new FileFilter() { public boolean accept(File file) { return file.isFile(); } }; } TestFilter(){ files = new HashSet&lt;File&gt;(); File file = new File("."); for(File f : file.listFiles(filterFiles)){ files.add(f); } } public static void main(String[] args){ // CONSTRUCTOR with no pars invoked and object "test" created here! TestFilter test = new TestFilter(); // Why does it not work with "this"? // "test" is surely the current object. for(File f : this.getFiles()){ System.out.println(f.getName()); } } public HashSet&lt;File&gt; getFiles() { return files; } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload