По сути, вам необходимо указать параметр типа для generi c class ArrayList
.
Поскольку вы добавляете объекты, созданные из разных классов, в один и тот же список, вы можете создать интерфейс, скажем, MyInterface
public interface MyInterface {
....
}
Все классы, возвращаемые из readFile
, должны реализовывать этот интерфейс. Например,
public class Movies implements MyInterface {
....
}
Теперь вы можете добавить параметр типа MyInterface
в соответствующие места:
public static void main(String[] args) {
ArrayList<MyInterface> LocationsList = readFile("Locations.csv", "Locations");
....
}
public static ArrayList<MyInterface> readFile(String fileName, String whichFile) {
ArrayList<MyInterface> list = new ArrayList<>();
....
}
Информация ниже добавлена на основе ответа
Фактически вы можете оставить интерфейс пустым, но тогда вам придется явно приводить объекты к конкретным классам, чтобы делать что-нибудь полезное.
- Вы можете преобразовать каждый объект, когда это необходимо
MyInterface myInterfaceObject = locationsList.get(0)
Locations locations = Locations.class.cast(myInterfaceObject);
ИЛИ
MyInterface myInterfaceObject = locationsList.get(0)
Locations locations = (Locations) myInterfaceObject;
ИЛИ Вы можете написать функцию конвертера списков для каждого конкретного типа
public class ListConverter {
public ArrayList<Locations> toLocationsArraylist(ArrayList<MyInterface> inList) {
ArrayList<Locations> outList = new ArrayList<>();
for (MyInterface listItem : inList) {
outList.add((Locations) listItem);
}
return outList;
}
}
, а затем
public static void main(String[] args) {
ArrayList<MyInterface> myInterfaceList = readFile("Locations.csv", "Locations");
ArrayList<Locations> locationList = ListConverter.toLocationsArraylist(myInterfaceList);
}
Если вы все же решите использовать это решение, рассмотрите возможность переименования MyInterface. более уместно, скажем, CsvRecord
или что-нибудь, специфичное для домена c.