如我所测试的,下面的代码执行没有任何问题。但是我听不懂逻辑。有人可以解释一下吗?

public static void main(String[] args) {
    List<String> london = new ArrayList<>(Arrays.asList("Chinatown","Croydon","Eden Park"));
    class City{
        private String name;
        City(String name){
            this.name = name;
        }

        public void printCity(){
            System.out.println(name);
        }
    }

    london.stream().map(City::new).forEach(City::printCity); //Chinatown,Croydon,Eden Park
}


在上面的示例代码中,我有以下问题。


foreach方法始终采用使用者对象。在这里,printCity方法不是带有参数的方法。仍然有效。怎么样?
这里的printCity方法不是静态方法。城市本身如何调用实例方法?

最佳答案

使用者等效于c -> c.printCity()(City c) -> c.printCity()之类的东西,或一些冗长的匿名类,很难输入。

城市实例是调用的主题。只是City::printCity形式的语法糖,它将方法传递给表达式,在该表达式中调用实例。

09-05 09:47