java - 匿名内部类方法的覆盖不起作用
问题描述
你能以这种方式覆盖一个方法吗?
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
吗?
解决方案
您正在返回相同的列表。用这个替换你的 for 循环:
for(int i=0;i<listA.length;i++)
{
listA[i] = "test" + listA[i];
}
推荐阅读
- bash - LEDE 中的 Bash shell 混淆器
- visual-studio - Visual Studio:调试器以第 16 个数字系统显示数字
- sql - 使用 FOR JSON 时获取值数组而不是对象数组
- testing - 使用 Swagger/OAS 测试 API
- spring - 无法弄清楚如何在策略模式设计中进行依赖注入或自动装配
- javascript - 如何通过它的'this'返回来用javascript捕获一个html元素(来自DOM)?
- c# - Sensenet:更新权限后节点权限变旧值
- java - 整数类型列表的方法参考
- machine-learning - pytorch 使用 argprse 传递架构类型
- java - Java - JAXB 强制 XML 节点为 ElementNSImpl 数据类型