2016-09-28 3 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

Я хочу этот класс реализует интерфейс 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); 
    } 

    [...] 
} 

Моя проблема заключается в том, что если я это сделаю, мой объект потеряет некоторую информацию. Я не вижу атрибутов «elements» и «totalCount».

enter image description here

Можно ли использовать интерфейс Collection и сохранить это атрибуты?

Если нет, есть ли хорошая альтернатива?

+1

Это похоже на функцию в вашем отладчике. Всякий раз, когда он встречает коллекцию, он покажет вам элементы вместо реальных данных. Это очень полезно для более сложных коллекций (думаю, HashSet), потому что при отладке этих классов вас интересует содержимое и как они используются в вашем коде, но не столько во внутренней работе. Таким образом, ответ на этот вопрос будет зависеть от того, какую IDE вы используете (и, следовательно, какой отладчик) – Thirler

ответ

2

Вы просматриваете функцию в своей среде IDE. В вашем случае, вероятно, IntelliJ.

Когда он встречает Collection, он будет показывать содержимое коллекции, а не фактическую реализацию. Это очень полезно в большинстве случаев, потому что вы используете Коллекции, которые могут иметь очень сложные структуры, такие как HashSet. Но при разработке собственной коллекции вы хотите видеть, что фактические работы в отладчике.

В IntelliJ это называется «Альтернативный вид для классов коллекции». manual объясняет, как отключить это.

В Eclipse это также доступно (но по умолчанию оно отключено). Эта функция называется логическими структурами. Это представление можно включить с помощью кнопки переключения («Показать логическую структуру») в представлении «Переменные».

+0

Спасибо. Я не знал, что это была настройка. – YLombardi

Смежные вопросы