java – 传递方法作为参数 – 这是可能吗?
发布时间:2020-12-14 05:41:41 所属栏目:Java 来源:网络整理
导读:我试图迁移到 java 8,并在我的dao类中有一些方法,执行以下操作 @Override@SuppressWarnings("unchecked")public ListGroup getGroups(){ Session session = sessionFactory.openSession(); ListGroup allGroups = (ListGroup)session.createQuery("from Grou
我试图迁移到
java 8,并在我的dao类中有一些方法,执行以下操作
@Override @SuppressWarnings("unchecked") public List<Group> getGroups() { Session session = sessionFactory.openSession(); List<Group> allGroups = (List<Group>)session.createQuery("from Group").list(); session.close(); return allGroups; } 这里对于所有方法重复使用相同的锅炉板sessionFactory.open和session.close. 在Java 8中有可能有一个打开和关闭的方法,并且采用我的代码的其余部分执行它的功能吗? 如果是这样 – 这个过程的名称是什么,或者任何人都可以提供一些有关如何实现这一点的帮助 解决方法
因为你想表达一个在Session实例上工作的代码(所以你可以抽象出它的创建和清理),并且可以返回一个任意的结果,一个Function< Session,T>将是封装此类代码的正确类型:
public <T> T doWithSession(Function<Session,T> f) { Session session = sessionFactory.openSession(); try { return f.apply(session); } finally { session.close(); } } 那么你可以使用它: @Override @SuppressWarnings("unchecked") public List<Group> getGroups() { return doWithSession(session -> (List<Group>)session.createQuery("from Group").list()); } 这不是一种特殊的Java 8技术.您可以在早期的Java版本中执行相同操作,另请参见What is the “execute around” idiom(感谢gustafc链接).更容易的是,Java 8为您提供了现有的 如果您所需的操作由单个方法调用组成,并且不需要类型转换,则可以将其实现为类似doWithSession(Session :: methodName)的方法引用,请参阅Method References in the tutorial (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 深入理解Java的接口与抽象类
- 在java中解析IBM 3270数据
- c# – 我可以执行多个与一个try块对应的catch块吗?
- Blackberry Java String到目前为止的转换
- Java / IntelliJ无法识别Dagger2组件的“Dagger”关键字
- java – 使用hashmap索引对象列表是一种好习惯吗?
- Java&RabbitMQ – 排队和多线程 – 或Couchbase作为作业
- RateLimiter 源码分析(Guava 和 Sentinel 实现)
- JSP Request.getRemoteUser()方法:获取请求用户的登录信息
- Java中使用Preconditions来检查传入参数介绍