我需要为编译时未知的类配置绑定。此外,这些类必须由不同的类加载器加载。以下片段大致描述了我的意图:
Classloader cl = findClassloader(...);
Class<?> key = cl.loadClass(keyClassName);
Class<?> impl = cl.loadClass(implClassName);
现在,我想简单地将密钥类绑定到impl类,如
bind(key).to(impl);
但是,通过通配类类型,这不起作用。简单地告诉Guice完整的完全限定类名(我想有一种机制可以从属性文件中加载绑定)也不起作用,因为guice不知道要使用哪个类加载器。
答案 0 :(得分:2)
泛型是一个很好的工具,可以确保你做正确的事情,但是它们并不适用于像这样复杂的情况。幸运的是,这里的泛型并不是必需的,而且无论如何它们都会被删除。
试试这个:
bind(key).to((Class) impl);
或者将其包装在警告抑制包装中:
@SuppressWarnings({"rawtypes"})
void bindUnsafely(Class<?> key, Class<?> impl) {
bind(key).to((Class) impl);
}