Tag: lazy evaluation

Hibernate无法初始化代理 – 没有Session

我的代码检索与用户相关的所有信息: SessionFactory sessionFactory = HibernateUtilities.configureSessionFactory(); Session session = sessionFactory.openSession(); UserDetails ud = null; Set userAddress = null; try { session.beginTransaction(); ud = (UserDetails) session.get(UserDetails.class, 1); userAddress = ud.getAddresses(); session.getTransaction().commit(); } catch (HibernateException e) { e.printStackTrace(); session.getTransaction().rollback(); } finally { session.close(); } System.out.println(ud.getName()); for(Address addr: userAddress){ System.out.println(“State ” + addr.getState()); } ud.getAddresses()只返回一组用户的Address es。 我的问题是:为什么即使会话已经关闭, ud对象仍然具有其值(例如,名称)? getAddresses()是UserDetails类的实例变量。 […]

Java流懒惰与融合和短路

我正在尝试在Java流API中形成一个关于懒惰评估应用的cocise和一致的理解。 这是我目前理解的: 元素仅在需要时被消耗,即流是惰性的,并且中间操作是惰性的,例如filter,仅在需要时才过滤。 中间操作可以融合在一起(如果它们是无状态的)。 短路操作不需要处理整个流。 我想要做的就是将所有这些想法结合起来,确保我不会歪曲任何事情。 我发现它很棘手,因为每当我阅读任何有关Java流的文献时,它都会说它们是懒惰的或利用懒惰的评估,然后非常可互换地开始讨论优化,如融合和短路。 所以我说对于以下内容是对的吗? 融合是如何在流API中实现延迟评估 – 即消耗元素,并且尽可能将操作融合在一起。 我认为如果不存在融合那么我们肯定会回到急切的评估,因为替代方案只是处理每个中间操作的所有元素,然后再转移到下一个中​​间操作? 如果没有融合或懒惰的评估,短路是可能的,但通过这两个原则的实施,在流的背景下是非常有帮助的吗? 我对此有任何进一步的见解和清晰度表示感谢。

返回第一个非空值

我有很多function: String first(){} String second(){} … String default(){} 每个都可以返回一个空值,默认值除外。 每个function可以采用不同的参数。 例如,第一个可以不带参数,第二个可以接受一个字符串,第三个可以接受三个参数,等等 。我想做的是: ObjectUtils.firstNonNull(first(), second(), …, default()); 问题在于,由于函数调用, 这需要进行急切的评估。 我想早点退出,在第二个函数之后说(因为函数调用可能很昂贵,想想API调用等)。 在其他语言中,您可以执行与此类似的操作: return first() || second() || … || default() 在Java中,我知道我可以做类似的事情: String value; if (value = first()) == null || (value = second()) == null … return value; 由于所有的== null检查,这不是非常易读的IMO。 ObjectUtils.firstNonNull()首先创建一个集合,然后迭代,只要该函数被懒惰地评估,这是可以的。 建议? (除了做一堆ifs)

java中延迟线程安全单例实例化的模式

懒惰的线程安全单例实例对每个编码器来说都不容易理解,所以我想在我们的企业框架中创建一个可以完成工作的类。 你怎么看待这件事? 你觉得它有什么坏处吗? 在Apache Commons中有类似的东西吗? 我怎样才能让它变得更好? Supplier.java public interface Supplier { public T get(); } LazyThreadSafeInstantiator.java public class LazyThreadSafeInstantiator implements Supplier { private final Supplier instanceSupplier; private volatile T obj; public LazyThreadSafeInstantiator(Supplier instanceSupplier) { this.instanceSupplier = instanceSupplier; } @Override // http://en.wikipedia.org/wiki/Double-checked_locking public T get() { T result = obj; // Wikipedia: Note the usage of […]