Can you override a method in this way?
public class test {
public static void main(String[] args) throws IOException {
File dir = new File("M:\\Java\\Test") {
@Override
public String[] list() {
String[] listA = super.list();
for (String s : listA) {
s = "test" + s;
}
return listA;
}
};
String[] listB = dir.list();
for (String s : listB) {
System.out.println(s);
}
}
}
I expected:
test1.txt
test10.txt
test2.txt
test3.txt
test4.txt
test5.txt
test6.txt
test7.txt
test8.txt
test9.txt
I received:
1.txt
10.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
I can't ask a new question and it concerns the same code so I will ask here. Is a compiler error caused by nesting method overrides?
public class test {
public static void main(String[] args) throws IOException {
File dir = new File("M:\\Java\\Test") {
@Override
public String[] list() {
String[] listA = super.list(new FilenameFilter() {
@Override
public boolean accept(File file, String string) {
return string.contains(".txt");
}
});
for (int i = 0; i < listA.length; i++) {
listA[i] = "test" + listA[i];
}
return listA;
}
};
String[] listB = dir.list();
for (String s : listB) {
System.out.println(s);
}
}
}
I recived:
Exception in thread "main" java.lang.StackOverflowError
at java.io.File.list(File.java:1155)
at findmyorder.test$1.list(test.java:22)
at java.io.File.list(File.java:1155)
at findmyorder.test$1.list(test.java:22)
at java.io.File.list(File.java:1155)
at findmyorder.test$1.list(test.java:22)
at java.io.File.list(File.java:1155)
at findmyorder.test$1.list(test.java:22)
at java.io.File.list(File.java:1155)
at findmyorder.test$1.list(test.java:22)
at java.io.File.list(File.java:1155)
at findmyorder.test$1.list(test.java:22)
at java.io.File.list(File.java:1155)
It looks like some infinite loop. The problem arose after adding FilenameFilter
to the list()
function.
Is this the result of nested @Override
?