搜尋

首頁  >  問答  >  主體

interface - Java中接口不能被实例化,那么如下的代码怎么理解?

    public static final Function<String, Set<String>> MAPPING_FUNCTION = new Function<String, Set<String>>() {
            @Override
            public Set<String> apply(String s) {
                return new HashSet<>();
            }
        };

MAPPING_FUNCTION已经是接口Function<String, Set<String>>的一个实例了啊?

PHP中文网PHP中文网2812 天前441

全部回覆(4)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 17:55:33

    這不是介面的實例,而是實作了介面的匿名內部類別的實例。
    你沒有註意到它後面有個大括號嗎?明顯與我們一般使用A a=new A()的形式不一樣。
    建議你看看內部類相關知識。

    回覆
    0
  • 黄舟

    黄舟2017-04-17 17:55:33

    這是匿名內部類別的一種寫法,實際上這種寫法等同於你新寫一個class,然後implements這個介面。
    問題是,單單為實作介面的一個方法而新建一個class,未免太小題大做,因此大多數的寫法會直接寫一個匿名的內部類別。

    因為我們並不關注類別的名字,我們只關注它的具體實現,這也是匿名內部類別的常見使用場景。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 17:55:33

    《瘋狂Java講義》第6章有詳細講解,不想看書就直接搜"匿名內部類"

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 17:55:33

    匿名內部類,相當於一個類別實作了這個介面。只不過把聲明和實作寫在了一起。

    回覆
    0
  • 取消回覆