Создать простую утилиту DI без использования Reflection - PullRequest
0 голосов
/ 02 февраля 2019

Скажите, что у меня что-то вроде этого:

async.inject(Map.of(
     "foo", new Task<Foo>(Set.of("bar"), v -> {
          v.done(null, new Foo());
     }),
     "bar", new Task<Bar>(Set.of("baz"), v -> {
          v.done(null, new Bar());
     }),
     "baz", new Task<Baz>(Set.of("bar","foo"), v -> {
          Bar b = v.get("bar");
          v.done(null, b.getWhatever());
     }),
), (err, result) -> {

      Bar b = result.get("bar");
      Foo f = result.get("foo");
      Baz z = result.get("baz");

});

У меня есть два вопроса:

  1. Есть ли способ проверить тип клавиш Set и сделатьуверен, что эти ключевые имена также есть на карте?AKA, у меня есть 3 вызова Set.of (), и я хочу убедиться, что любой ключ в этих наборах также находится в Map.of () Map.(Используя TypeScript, мы могли бы использовать keyof).

  2. Параметр Task представляет разрешенный тип - есть ли способ прочитать этот тип из других методов?Например:

    Bar b = result.get ("bar");

Как компилятор узнает, что это экземпляр Bar?Есть ли способ получить проверку типов на этом?

В идеале я могу сделать некоторую проверку типов и избежать отражения, чтобы я мог поймать больше проблем во время компиляции.

И да, япопытка перенести асинхронную библиотеку из JS-land в Java :) Обратите внимание, что в приведенном выше вопросе есть некоторые циклические зависимости, просто игнорируйте их.

...