如何检查实现接口的参数的类型?

时间:2019-01-23 17:35:33

标签: java dependency-injection interface micronaut

我正在使用依赖项注入来注入接口的实现。我想使用基于接口的参数也可以注入具有实现的参数的注入类型的方法。
示例

  • SessionInterfaceSession_ASession_B
  • 实现
  • ConfigInterfaceConfig_AConfig_B
  • 实现
  • Session_A仅应使用Config_A的对象,与_B相同

在应用程序中,将注入会话的实现(没有配置)。稍后,可以注入config的实现,以将其用作会话方法run(ConfigInterface config)
的参数 在这种方法中,我想确保给定参数的类型是与会话相对应的类型。

我应该使用getClass()instanceof还是其他方式进行检查?

1 个答案:

答案 0 :(得分:0)

(您将在此问题空间中找到很多讨论。我仍在改善对此类问题的理解,欢迎对此答案进行任何改进。)

一个可能的答案是使用PECS类型模式(PECS代表Producer Extends和Consumer Super;请参阅What is PECS (Producer Extends Consumer Super)?)。

这是一个代码示例:

interface PECS_Supplier<T> {
    T supply();
}

interface PECS_Consumer<T> {
    void consume(T value);
}

public class PECS_Engine {
    public <T> void process(PECS_Supplier<? extends T> supplier, PECS_Consumer<? super T> consumer) {
        T nextValue;
        while ( (nextValue = supplier.supply()) != null )  {
            consumer.consume(nextValue);
        }
    }
}

请注意处理方法中的“?扩展T”和“?超级T”。