class 方法参数内覆盖的实例
class instance with override inside method parameter
谁能帮我理解 java
的这个代码块
String [] files= file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return true;
}
});
这只是一个示例,我需要了解在方法参数中使用覆盖方法的新实例的概念。
我明白这段代码的作用,但我需要理解这个概念*
这叫匿名内幕Class
没有名字的class在java中被称为匿名内部class。如果必须覆盖 class 或接口的方法,则应使用它。
看看 File.list(FilenameFilter filter)
的 documentation。
它接受一个 FilenameFilter 作为参数,该参数又具有方法
boolean accept(File dir, String name)
您想将新的 FilenameFilter
传递给该方法,您可以通过将其作为 anonymous class 传递并覆盖匿名 class 中的 accept
方法来实现].
假设您有一个以接口或抽象 class 作为参数的方法。如果调用此方法,则必须传递指定类型的具体实例。一种可能性是,在参数内部创建一个实例。这叫做匿名class.
只有当你需要这个 class 一次时才应该这样做。
如果您检查 java.io.File 中 list() 的实际实现,它看起来像这样。
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return v.toArray(new String[v.size()]);
}
该方法需要任何实现 FilenameFilter 的实例。它在 File.list() 方法内部所做的是调用过滤器参数的 accept() 。并且实际上执行了调用者的原始实现。所以这意味着您在这种情况下提供的重写方法内容。
谁能帮我理解 java
的这个代码块String [] files= file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return true;
}
});
这只是一个示例,我需要了解在方法参数中使用覆盖方法的新实例的概念。
我明白这段代码的作用,但我需要理解这个概念*
这叫匿名内幕Class
没有名字的class在java中被称为匿名内部class。如果必须覆盖 class 或接口的方法,则应使用它。
看看 File.list(FilenameFilter filter)
的 documentation。
它接受一个 FilenameFilter 作为参数,该参数又具有方法
boolean accept(File dir, String name)
您想将新的 FilenameFilter
传递给该方法,您可以通过将其作为 anonymous class 传递并覆盖匿名 class 中的 accept
方法来实现].
假设您有一个以接口或抽象 class 作为参数的方法。如果调用此方法,则必须传递指定类型的具体实例。一种可能性是,在参数内部创建一个实例。这叫做匿名class.
只有当你需要这个 class 一次时才应该这样做。
如果您检查 java.io.File 中 list() 的实际实现,它看起来像这样。
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return v.toArray(new String[v.size()]);
}
该方法需要任何实现 FilenameFilter 的实例。它在 File.list() 方法内部所做的是调用过滤器参数的 accept() 。并且实际上执行了调用者的原始实现。所以这意味着您在这种情况下提供的重写方法内容。