Помогите построить класс с ArrayList в качестве параметра - PullRequest
2 голосов
/ 04 сентября 2011

Я пытался решить это в течение нескольких часов, но застрял, поэтому я прихожу сюда за какой-то помощью.NB Я использую BlueJ для создания этих классов, поскольку я все еще учусь.

Я пытаюсь создать PlayList, который имеет два параметра: name и ArrayList дорожек.Затем он создает список воспроизведения и копирует дорожки из списка (по порядку) в список воспроизведения;но я пока не хочу помогать с этой частью.

Моя проблема в том, что я не уверен, как вызывать ArrayList при создании PlayList. Поскольку указанный тип имеет тип.

public class PlayList
{    
private String myName;
private ArrayList<Track> myTracks;
private int myDuration;

public PlayList(String name, ArrayList<Track> tracks) {
    name = myName;
    myTracks = new ArrayList<Track>();
    for (Track t : tracks) {
        myTracks.add(t);
    }
}

}

Что происходит вBlueJ, когда я создаю новый класс PlayList, он предоставляет пустое поле для имени String и треков ArrayList.Строковое имя в порядке, так как я могу просто написать «что угодно», но я застрял в треках ArrayList?

Я знаю, что это, вероятно, не очень конкретный вопрос, но я все еще учусь.

Ответы [ 2 ]

2 голосов
/ 04 сентября 2011

ответ sunadorer должен ответить на ваш прямой вопрос. У меня есть несколько общих замечаний по поводу соглашений об именах полей вашего класса и параметров вашего конструктора.

Я бы не ставил перед вашими полями 'my'. Это немного вопрос стиля, но я бы не возражал против использования тех же имен для параметров конструктора. Вы можете различить параметр и поле, используя this.name при обращении к полю.

Кроме того, использование ArrayList здесь представляется излишне ограничительным: вы можете использовать более общий интерфейс List (который ArrayList является лишь одной реализацией, поэтому вам не нужно прикасаться к PlayList, если вы хотите другой вид List позже o):

public class PlayList {    

  private String name;
  private List<Track> tracks;
  private int duration;

  public PlayList(String name, List<Track> tracks) {
    this.name = name;
    this.tracks = new ArrayList<Track>(tracks);
  }
}
1 голос
/ 04 сентября 2011

Конструктор вашего PlayList хочет получить объект типа ArrayList, заполненный элементами типа Track.Поэтому для создания PlayList вы должны предоставить уже созданный.

Это зависит от вашего окружения вызова, возможно, вы уже создали список там и можете просто поместить его в свой конструктор PlayList, но вам нужно что-то вродеэто где угодно:

// Create an empty list
ArrayList<Track> tracks = new ArrayList<Track>();
// Add a track. e.g. when receiving a gui event
tracks.add(track); // track was created with new Track()

Или, может быть, вам не нужны / нужны списки за пределами PlayList объектов.Вы можете использовать PlayList объекты для управления ими и их инкапсуляции, изменив конструктор так, чтобы он только создавал пустой список и позволял другим добавлять к нему дорожки с помощью метода addTrack.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...