在不使用反射的情况下创建简单的DI实用工具

时间:2019-02-01 21:06:28

标签: java dependency-injection async.js

说我有这样的东西:

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键进行类型检查,并确保这些键名称也在Map中?再次,我有3个Set.of()调用,并且我想确保这些集合中的任何键也都在Map.of()地图中。 (使用TypeScript,我们也许可以使用keyof)。

  2. Task的参数表示已解析的类型-是否可以从其他方法读取该类型?例如:

    Bar b = result.get(“ bar”);

编译器如何知道这是Bar实例?有没有办法进行类型检查?

理想情况下,我可以进行一些类型检查并避免反射,以便在编译时可以发现更多问题。

是的,我正在尝试将异步库从JS-land移植到Java :)请注意,上面的问题中有一些循环依赖项,请忽略它们。

0 个答案:

没有答案