[英]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;
}
});
這只是示例,我需要了解方法參數內部具有重寫方法的新實例的概念。
我了解此代碼的作用,但我需要了解概念*
看一下File.list(FilenameFilter filter)
的文檔 。
它以FilenameFilter作為參數,該參數又具有方法
boolean accept(File dir, String name)
考慮您有一個帶有接口或抽象類作為參數的方法。 如果調用此方法,則必須傳遞指定類型的具體實例。 然后,一種可能性是在參數內創建一個實例。 這稱為匿名類 。
僅當您只需要一次此類時,才應該這樣做。
如果您在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()方法內部執行的操作是調用filter參數的accept()。 並且實際上執行調用方的原始實現。 因此,這意味着您在這種情況下提供的覆蓋的方法內容。
這稱為匿名內部類
在Java中,沒有名稱的類稱為匿名內部類。 如果必須重寫類或接口的方法,則應使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.