栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有非SAM接口的lambda的Java习惯用法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有非SAM接口的lambda的Java习惯用法

我发现的最优雅的方法是使用匿名桥:

    // SAM bridge with lambda implementation    window.addWindowListener(        WindowBridge.windowOpened( b -> System.out.println("opening via lambda!")        )    );

与SAM类型的情况类似,它比匿名适配器还干净:

    // non-SAM with adapter implementation with override    window.addWindowListener(        new WindowAdapter() { @Override public void windowOpened(Event e){     System.out.println("WindowAdapter opened via override!"); }        }    );

但是它确实需要带有静态工厂的桥,这有点尴尬:

import java.util.function.Consumer;public interface WindowBridge {    // SAM for this method    public abstract class WindowOpened extends WindowAdapter {        public abstract void windowOpened(Event e);    }    // factory bridge    public static WindowOpened windowOpened(Consumer<Event> c) {        return new WindowOpened() { public void windowOpened(Event e){     c.accept(e); }        };    }    // SAM for this method    public abstract class WindowClosing extends WindowAdapter {        public abstract void windowClosing(Event e);    }    // factory bridge    public static WindowClosing windowClosing(Consumer<Event> c) {        return new WindowClosing() { public void windowClosing(Event e){     c.accept(e); }        };    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号