2016-09-28 20 views
2

我有一个包含两个属性的类:实现Java集合而不丢失信息

@lombok.Data 
public class BusinessObjectCollection<T> implements Serializable { 
    protected List<T> elements; 
    protected Integer totalCount; 
    public BusinessObjectCollection() { 
     this.elements = new ArrayList<>(); 
     this.totalCount = 0; 
    } 
} 

enter image description here

我想这个类,以便调用remove实现了接口java.util.Collection中的() ,addAll()和一些其他方法直接在BusinessObjectCollection对象上。

所以我修改我的课是这样的:

@lombok.Data 
public class BusinessObjectCollection<T> implements Collection<T>, Serializable{ 
    protected List<T> elements; 
    protected Integer totalCount; 
    public BusinessObjectCollection() { 
     this.elements = new ArrayList<>(); 
     this.totalCount = 0; 
    } 

    @Override 
    public boolean addAll(Collection<? extends T> c) { 
     return elements.addAll(c); 
    } 

    @Override 
    public boolean removeAll(Collection<?> c) { 
     return elements.removeAll(c); 
    } 

    [...] 
} 

我的问题是,如果我这样做,我的对象失去了一些信息。我看不到“元素”和“totalCount”属性。

enter image description here

是否有可能使用Collection接口,并保持这个属性?

如果不是,那么有没有好的选择?

+1

这似乎是您的调试器中的一个功能。无论何时遇到集合,它都会显示元素而不是实际的数据。这对于更复杂的集合(HashSet)非常有用,因为在调试那些对内容感兴趣的类时,以及它们在代码中的使用方式,而不是在内部运行时。所以这个答案取决于你使用的IDE(以及调试器) – Thirler

回答

2

您正在查看IDE中的功能。在你的情况下可能IntelliJ。

当它遇到Collection时,它只会显示集合的内容而不是实际的实现。这在大多数情况下非常有用,因为您正在使用可能具有非常复杂结构的集合,例如HashSet。但是在开发自己的集合时,您希望在调试器中看到实际的工作情况。

在IntelliJ中,这被称为“集合类的替代视图”。 manual解释了如何禁用它。

在Eclipse中,这也是可用的(但似乎默认关闭)。该功能称为逻辑结构。该视图可以通过变量视图中的切换按钮('显示逻辑结构')来启用。

+0

谢谢。我不知道有这个设置。 – YLombardi