Przekazywanie metody jako parametr do innej metody.

0

Witajcie.

Mam o to taki problem. Stworzyłem funkcyjny interfejs, który przekazuję jako fes parametry do metody. W klasie gdzie wykonuję tą metodę zaimplementowałem dwa takie interfejsy. Jednak mam problem gdy zdeklaruję je w ten sposób

    private RunProcess runLastProcess = processFinished -> {
        Process process = processQueue.poll();
        waitForProcessToFinish(process.getPhaseProcessor());
        int lastProcessFinished = processFinished + process.getPhaseProcessor();
        process.setFinishTime(lastProcessFinished);
        System.out.println(ANSI_GREEN + process);
        return processFinished;
    };

    private RunProcess runProcess = processFinished -> {
        Process process = processQueue.poll();
        waitForProcessToFinish(process.getPhaseProcessor());
        processFinished += processFinished + process.getPhaseProcessor();
        process.setFinishTime(processFinished);
        System.out.println(ANSI_GREEN + process);
        return processFinished;
    };

a następnie wywołuję moją metodę

int allProcessFinished = runAlgorithm(runProcess, runLastProcess);

dostaję error

Exception in thread "algorithms.FCFS" java.lang.NullPointerException

Jednak gdy zrobię to w ten sposób

        int allProcessFinished = runAlgorithm(processFinished1 -> {
            Process process = processQueue.poll();
            waitForProcessToFinish(process.getPhaseProcessor());
            processFinished1 += processFinished1 + process.getPhaseProcessor();
            process.setFinishTime(processFinished1);
            System.out.println(ANSI_GREEN + process);
            return processFinished1;
        }, processFinished -> {
            Process process = processQueue.poll();
            waitForProcessToFinish(process.getPhaseProcessor());
            int lastProcessFinished = processFinished + process.getPhaseProcessor();
            process.setFinishTime(lastProcessFinished);
            System.out.println(ANSI_GREEN + process);
            return 0;
        });

To działa. Nie bardzo rozumiem czemu w pierwszym przypadku dostaję te nulle, a tak wygląda metoda runAlgorithm.

   int runAlgorithm(RunProcess runProcess, RunProcess runLastProcess) {
        int doneProcesses = 0;
        int processesFinishTime = 0;
        while (doneProcesses != NUMBER_OF_PROCESSES) {
            if (processQueue.size() != 0) {
                if (doneProcesses == (NUMBER_OF_PROCESSES - 1)) {
                    runLastProcess.run(processesFinishTime);
                } else {
                    processesFinishTime = runProcess.run(processesFinishTime);
                }
                doneProcesses++;
            }
        }
        return processesFinishTime;
    }
0

processQueue.poll() zwraca null jeśli kolejka jest pusta. Może powinieneś sprawdzać wynik?

0

W tej

processesFinishTime = runProcess.run(processesFinishTime);

Raczej ten poll() nie ma znaczenia bo w metodzie sprawdzam najpierw czy processesQueue.size() != 0

1 użytkowników online, w tym zalogowanych: 0, gości: 1