首页 > 解决方案 > 匿名内部类方法的覆盖不起作用

问题描述

你能以这种方式覆盖一个方法吗?

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);
        }
    }
}

我期望:

test1.txt
test10.txt
test2.txt
test3.txt
test4.txt
test5.txt
test6.txt
test7.txt
test8.txt
test9.txt

我收到了:

1.txt
10.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt

我不能问一个新问题,它涉及相同的代码,所以我会在这里问。嵌套方法覆盖是否会导致编译器错误?

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);
        }
    }
}

我收到:

    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) 

它看起来像一些无限循环。FilenameFilter添加到list()功能后出现问题。这是嵌套的结果@Override吗?

标签: javaoverriding

解决方案


您正在返回相同的列表。用这个替换你的 for 循环:

        for(int i=0;i<listA.length;i++)
        {
            listA[i] = "test" + listA[i];
        }

推荐阅读