首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将类注入到Guice中的“Class<?>clazz”?

如何将类注入到Guice中的“Class<?>clazz”?
EN

Stack Overflow用户
提问于 2013-05-08 16:23:17
回答 3查看 614关注 0票数 2

我有一个带有构造函数的类,例如:

代码语言:javascript
复制
@Inject
public ClassTest(ITestInterface testInterface, Class<?> clazz){
    ...
}  

问题是如何将类绑定到可以注入到此构造函数中的实现,ClassTest绑定是否会选择正确的类?

我想在不同的时间点注入不同的类。当我试图解决这个问题时,Guice给出了一个错误,它在java.lang.Class上找不到任何合适的构造函数。

EN

Stack Overflow用户

发布于 2020-11-15 05:30:38

即使没有辅助注入,也可以解决这个问题,只需在创建绑定时使用TypeLiteral

代码语言:javascript
复制
import javax.inject.Inject;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.TypeLiteral;

public class ClassTest
{
    static interface ITestInterface {}

    @Inject
    public ClassTest(ITestInterface testInterface, Class<?> clazz)
    {
        System.err.println("testInterface=" + testInterface);
        System.err.println("clazz=" + clazz);
    }

    public static void main(String... argument)
    {
        ITestInterface testObject = new ITestInterface() {};
        Module module = new AbstractModule()
        {
            @Override
            protected void configure()
            {
                binder().bind(ITestInterface.class).toInstance(testObject);
                binder().bind(new TypeLiteral<Class<?>>() {}).toInstance(testObject.getClass());
                //            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            }
        };
        Injector injector = Guice.createInjector(module);
        injector.getInstance(ClassTest.class);
    }
}

运行此代码时的输出类似于:

代码语言:javascript
复制
testInterface=ClassTest$1@3d921e20
clazz=class ClassTest$1

我不得不同意@VladimirMatveev的观点,这是一个有点不寻常的用例,需要注入java.lang.Class对象可能表明存在设计缺陷。我遇到的这种类型的注入的唯一看似有效的情况是类型检查,注入的类需要Class对象来检查其他对象的类型(通过Class.isInstance(...)),但不希望注入实例(!)(例如,因为它不是单例,可能会产生各种其他不需要的对象创建)。尽管如此,即使是这种情况也有些做作,可能会以更好的方式解决。至少,我会使用更具体的类型参数,比如Class<? extends ITestInterface> (我怀疑这就是OP的目的)。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16435871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档