Как вызвать метод из универсального класса в качестве параметра - PullRequest
0 голосов
/ 22 октября 2018

Я пытался заставить мой код использовать дженерики, но я не могу заставить его работать, используя дженерики.Буду признателен за любую помощь.

У меня есть 3 класса: класс, курс, учитель

У меня есть следующий рабочий код 3 раза: (с небольшим изменением класса)

private ObservableList<Classroom> parseClassrooms() {
    // create new Observable List
    ObservableList<Classroom> classrooms = FXCollections.observableArrayList();

    // get lines from file;
    ArrayList<String> arrayList = fhClassroom.read();

    for (String line : arrayList) {
        classrooms.add(Classroom.fromString(line));
    }

    return classrooms;
}

Методы в моих классах:

@Override
public String toString() {
    return name;
}

public static Classroom fromString(String line) {
    return new Classroom(line);
}

Можно ли сделать этот метод универсальным?и передать класс в качестве параметра?

Я хотел бы что-то вроде следующего:

private ObservableList<T> parseClassrooms(T, FileHelper fh) {
    // create new Observable List
    ObservableList<T> items = FXCollections.observableArrayList();

    // get lines from file;
    ArrayList<String> arrayList = fh.read();

    for (String line : arrayList) {
        items.add(T.fromString(line));
    }

    return items;
}

1 Ответ

0 голосов
/ 22 октября 2018

Моя лучшая попытка:

import java.util.ArrayList;
import java.util.function.Function;

public class Helper {

    public static <T> ObservableList<T> parseItems(Function<String, T> lineToItemFunction, FileHelper fh) {
        // create new Observable List
        ObservableList<T> items = FXCollections.observableArrayList();

        // get lines from file;
        ArrayList<String> arrayList = fh.read();

        for (String line : arrayList) {
            items.add(lineToItemFunction.apply(line));
        }

        return items;
    }
}

И вы называете это так:

ObservableList<ClassRoom> classRooms = Helper.parseItems(ClassRoom::fromLine, fileHelper);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...