java – 用于子类化Guava的ImmutableSet的适当方法
我有一个班级
class Receipt { private Set<Order> orders; public Receipt(Set<Order> orders) { this.orders = ImmutableSet.copyOf(orders) } } 这对我很有帮助. 然而,由于某些类型擦除&我面临的持久性问题,我现在想介绍一种形式 class OrderSet extends Set<Order> {} 显然我不能扩展Set< Order>,因为它是一个接口.我想将我的实现保持为不可变.但是,我不能扩展ImmutableSet< Order>,因为文档状态:
我可以使用组合,为OrderSet提供ImmutableSet的后备集合,并将所有Set方法委托给它.然而,这似乎有点矫枉过正. 还有另一种方法可以在这里实现非泛型子类吗? 解决方法
不,构图不是矫枉过正,这正是要走的路.
您应该按如下方式创建OrderSet,因为正如Louis在评论中强调的那样,这个用例正是它们的意思: public class OrderSet extends ForwardingSet<Order> { private final ImmutableSet<Order> orders; public class OrderSet (Set<Order> orders) { this.orders = ImmutableSet.copyOf(orders); } protected ImmutableSet<Order> delegate() { return orders; } } Guava中的不可变类是为了不扩展它们而设计的.你必须使用构图,这才是正确的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |