Guice:将Class <! - ? - >绑定到Class <! - ? - >

时间:2014-10-30 10:18:51

标签: java generics guice inject

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

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

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

bind(key).to(impl);

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

1 个答案:

答案 0 :(得分:2)

泛型是一个很好的工具,可以确保你做正确的事情,但是它们并不适用于像这样复杂的情况。幸运的是,这里的泛型并不是必需的,而且无论如何它们都会被删除。

试试这个:

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

或者将其包装在警告抑制包装中:

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