Fabryka niestandardowych kontrolerów JavaFX

Eksperymentowałem zFXMLLoader i używającsetControllerFactory metoda wykorzystująca zwyczajCallback<P,R> realizacja.

Dokumentacja ORACLE mówi co następuje:

Implementacja może zwrócić wartość pustą, aby wskazać, że nie tworzy lub nie może utworzyć kontrolera danego typu; w tym przypadku domyślny mechanizm budowy kontrolera zostanie wykorzystany przez program ładujący.

Rezultatem, który chcę osiągnąć, jest to, że mogę użyć struktury wstrzykiwania zależności, aby utworzyć dowolne kontrolery wymagające parametrów, ale pozwolęFXMLLoader załaduj dowolne sterowniki, które nie wymagają parametrów.

Więc jeśli mam następujący prosty plik FXML, który używaViewController klasa, która nie przyjmuje żadnych parametrów ...

<StackPane fx:id="pane"
          xmlns:fx="http://javafx.com/fxml"
          fx:controller="my.package.ViewController">
</StackPane>

i używam następującej prostej implementacji fabryki kontrolerów do sygnalizowaniaFXMLLoader że chcę, aby zarządzał konstrukcją kontrolera w tym przypadku ...

loader.setControllerFactory(new Callback<Class<?>, Object>(){
    @Override
    public Object Call(Class<?> type) {
        return null; // Let the FXMLLoader handle construction...
    }
});

po wywołaniuload() metoda moja metoda Initialise wViewController klasa nigdy nie jest wywoływana (zweryfikowałem to za pomocą punktu przerwania).

Jeśli zmienię implementację fabryki kontrolerów, aby zwrócić wystąpienieViewController klasa to wszystko działa zgodnie z oczekiwaniami.

Czy ktoś może mi pomóc wyjaśnić moje zamieszanie? Czy używamCallback interfejs niepoprawnie lub czy dokumentacja ORACLE jest niepoprawna?

questionAnswers(1)

yourAnswerToTheQuestion