【问题标题】:Guice: bind Class<?> to Class<?>Guice:将 Class<?> 绑定到 Class<?>
【发布时间】:2014-10-30 10:18:50
【问题描述】:

我需要为编译时未知的类配置绑定。此外,这些类必须由不同的类加载器加载。下面的 sn-p 大致描述了我的意图:

Classloader cl = findClassloader(...);
Class<?> key = cl.loadClass(keyClassName);
Class<?> impl = cl.loadClass(implClassName);

现在,我想简单地将键类绑定到 impl 类,如

bind(key).to(impl);

但是,对于通配符类类型,这不起作用。简单地告诉 Guice 完整的完整类名(我猜有一种机制可以从属性文件中加载绑定)也行不通,因为 guice 不知道要使用哪个类加载器。

【问题讨论】:

    标签: java generics guice inject


    【解决方案1】:

    泛型是确保您做正确事情的绝佳工具,但它们不适用于此类复杂情况。幸运的是,泛型在这里并不是必需的,无论如何它们都会在编译时被删除。

    试试这个:

    bind(key).to((Class) impl);
    

    或者将它包装在一个警告抑制的包装器中:

    @SuppressWarnings({"rawtypes"})
    void bindUnsafely(Class<?> key, Class<?> impl) {
      bind(key).to((Class) impl);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多