Lambda for JavaFX Task
发布时间:2020-12-14 05:36:53 所属栏目:Java 来源:网络整理
导读:编译器为此代码提供了此错误“lambda表达式的目标类型必须是接口”: TaskIterableShowing task = () - sDAO.listFiltered(); listFiltered()的返回类型是Iterable Showing. 如何在lambda中使用Task接口? 解决方法 Task是一个抽象类,而不是一个接口,因此不
编译器为此代码提供了此错误“lambda表达式的目标类型必须是接口”:
Task<Iterable<Showing>> task = () -> sDAO.listFiltered(); listFiltered()的返回类型是Iterable< Showing>. 解决方法
Task是一个抽象类,而不是一个接口,因此不能使用lambda表达式直接创建它.
您通常只使用内部类来子类化Task: Task<Iterable<Showing>> task = new Task<Iterable<Showing>>() { @Override public Iterable<Showing> call throws Exception { return sDAO.listFiltered(); } }); 如果您想要使用lambda表达式创建Task的功能,您可以创建一个可重用的实用程序方法来为您执行此操作.由于您需要在Task中实现的抽象方法调用与Callable中的接口方法具有相同的签名,因此您可以执行以下操作: public class Tasks { public static <T> Task<T> create(Callable<T> callable) { return new Task<T>() { @Override public T call() throws Exception { return callable.call(); } }; } } 由于Callable是一个FunctionalInterface(即一个带有单个抽象方法的接口),因此可以使用lambda表达式创建它,所以你可以这样做 Task<Iterable<Showing>> task = Tasks.create(() -> sDAO.listFiltered()); 有一个explanation为什么不允许lambdas用于在OpenJDK邮件列表上使用单个抽象方法创建(有效)抽象类的子类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 有没有一种简单的方法在Guava中循环stdin?
- java – 部署到应用程序服务器的正确maven2阶段是什么?
- java – 使用Clipboard和AbstractAction进行JTable复制和粘
- android系统进程手机内存工具类
- Java中的泛型方法详解及简单实例
- 使用JPA EmbeddedId和Hibernate,“不知道是否传递了类名…是
- java – 将数字数组转换为CSV字符串的最佳方法?
- java – 如何知道在RequestWrapper对象中转发请求的时间
- java常用工具类之Excel操作类及依赖包下载
- java – 在业务逻辑和数据层看起来重叠时分解它们的最佳设计