将Interface作为参数传递给Method

时间:2018-01-23 06:11:25

标签: java interface

我已经看到我们可以在Method中传递任何类型的参数。

import java.io.File;
import java.io.FileFilter;

public class LastModified {

    public static File lastFileModified(String dir) {
        File fl = new File(dir);
        File[] files = fl.listFiles(new FileFilter() {
            public boolean accept(File file) {
                return file.isFile();
            }
        });
        long lastMod = Long.MIN_VALUE;
        System.out.println("lastMod:"+lastMod);
        File choice = null;
        for (File file : files) {
            System.out.println("File:"+file);
            if (file.lastModified() > lastMod) {
                choice = file;
                lastMod = file.lastModified();
            }
        }
        return choice;
    }

    public static void main(String[] args) {

        lastFileModified("D:\\TestFiles");

    }

}

这里在listFiles方法中我们传递了Interface事物。似乎正在创建Interface对象,但据我所知,它无法完成。它只是引用实现该接口的类的对象。

据说“这只是一种说法”这个参数将接受支持此接口的任何对象。它等同于接受基类类型的某个对象,即使你传入了一个子类。“NOT CLEARED

问题:

1) **new FileFilter()** of which class object is being created here ?
2) If we are using interface in class, then why its not implemented in above class ?
3) If its a one more way to implement, then what if that interface would have 10 declared methods ? So Do we need to define all after  **new FileFilter()** ?

任何人都可以帮我理解这个吗?我真的很困惑

2 个答案:

答案 0 :(得分:2)

要回答您的问题,我们逐一介绍

1)new FileFilter()在这里创建了哪个类对象?

它将是匿名类的对象。见Can we create an object of an interface?

2)如果我们在课堂上使用界面,为什么它没有在上面的类中实现?

它不需要从主类实现。您只是在引用类中不需要实现的接口。

3)如果它是另一种实现方式,那么如果该接口将有10个声明的方法呢?那么我们是否需要在new FileFilter()之后定义所有内容?

是的,在这种情况下,需要实施所有方法。

答案 1 :(得分:0)

匿名类可以实现接口,而且没有"实现"关键词。

更多stackoverflow链接:Can we create an instance of an interface in Java?Can we create an object of an interface?

另外,您已经了解了Java 8中引入的功能接口案例。只有一个抽象方法的接口称为功能接口。

在此处阅读有关功能接口的更多信息:https://www.journaldev.com/2763/java-8-functional-interfaces