Смотри, я предполагаю, что у вас есть класс Track
с целочисленным значением track
, такие как следующее:
public class Track{
public final int track;
public Track(final int track){
this.track = track;
}
public int getTrack(){
// this method is unnecessary if you declare
// track as public final
return track;
}
}
Так что теперь ваш метод должен искать Ваш ArrayList
из Track
объектов для предполагаемого индекса:
public Track getTrack(final int track){
for(final Track thisTrack: tracks){
if(thisTrack.getTrack() == track)
return thisTrack;
}
// the track wasn't found, return null
return null;
}
Все это предполагает, что индекс трек уникален - в противном случае вы будете возвращать первый Track
объект, который вы положили в ArrayList
, который соответствует вашему критерию поиска.
... еще лучше, если вы используете public final
обозначение для переменной track
, то вы можете просто сделать:
public Track getTrack(final int track){
for(final Track thisTrack: tracks){
if(thisTrack.track == track)
return thisTrack;
}
// the track wasn't found, return null
return null;
}
Если вы хотите, чтобы переработать ваши Track
объекты, то внутренняя varibale int track
должна быть private, и вы должны предоставить методы getter и setter, но если вы думаете, что когда-то создается объект Track
, он никогда не будет изменен (т. е. является неизменным), тогда вы должны пойти с объявлением public final int track
, чтобы доступ к переменной (которая никогда не изменяется и примитив) не требует вызова метода.
Существует еще один вариант, вы можете пойти с, который я очень отговорить, но вы можете перезаписать метод equals
в Object
и использовать метод indexOf
в ArrayList
найти свой объект:
public class Track{
public final int track;
public Track(final int track){
this.track = track;
}
public int getTrack(){
// this method is unnecessary if you declare
// track as public final
return track;
}
@Override
public boolean equals(final Object o){
// make sure this object is a Track object
if(o instanceof Track){
final Track t = (Track)o;
// if the two track indices equal each other then they are
// same track object
return t.track == track;
}
// this Object isn't a Track object and so definitely isn't equal to
// this Track object
return false;
}
Тогда в вашем поиск вы можете создать новый объект Track
(это плохо, потому что он добавляет ненужную память в куче, который нужно будет собран сборщиком мусора, позже - примитивы добавляются в стек, который почему выше является предпочтительным - вещи добавлены в стек немедленно возвращаются после возвращения метода):
public Track getTrack(final int track){
// create a new Track object to search for
final Track testTrack = new Track(track);
// get the index of this Track object (if isn't in the list, this will
// return -1)
final int index = tracks.indexOf(testTrack);
// if index is valid return the track at the given index, else
// return null (the Track doesn't exist).
return index >= 0 ? tracks.get(index) : null;
}
Как вы можете использовать двойной равный оператор на примитиве и объекте? Это катастрофическая ошибка компиляции. – ares
Вы вызываете 'tracksN.size()', который возвращает 'int'. Это вызывает ошибку времени компиляции (вы не можете вызвать метод на 'int'). Скорее всего, это 'trackN.get (i) .getTrack()' - или любой метод из класса 'Track' возвращает значение целочисленного трека. – Jared
Почему вам не нужен отдельный метод для получения объекта из 'ArrayList' по индексу. В 'ArrayList' уже есть' get (int index) '. –