1

最近我下载Roboguice并试了一下。总的来说我喜欢它,我认为它可以缓解Android开发过程中的某些方面,但是我遇到了一个还没有找到解决方案的情况:我想注入一个类,但是那个类有一个,或者更多的构造函数有几个参数。

在这种情况下,我将如何指定选择哪个构造函数进行实例化,并将值传递给构造函数?

例如,我有一个TestRobo带有 2 个构造函数的类,我想从第二个构造函数实例化对象,将firstName,lastName作为参数传递:

public class TestRobo implements ITestRobo {

    public TestRobo(String fullName) {
        //....
    }

    public TestRobo(String firstName, String lastName) {
        //...
    }
}

现在,如果我像这样注入它:

@Inject
private ITestRobo testRobo;

它抛出一个异常,它找不到合适的构造函数。

4

2 回答 2

3

免责声明1:我也是新手。

免责声明2:尚未尝试过。

根据谷歌自己的Guice Documentation,指定使用哪个构造函数的方法是在其中添加@Inject 装饰器

    class Test{

    //This constructor is ignored
    Test(){}

    //This constructor is called during injection
    @Inject
    Test(Context pContext){}


    }

在这种情况下,注入器调用第二个构造函数并尝试注入一个 Context 对象来调用它。如果找不到,则会抛出异常。

显然,您也可以将@Inject 装饰器放到其他方法中,这些方法将在注入期间调用构造函数后调用。

资料来源:Google Guice 官方文档

于 2012-12-03T13:34:30.613 回答
1

您需要将 ITestRobo 绑定到其 TestRobo 实现。您可以通过将 @ProvidedBy(TestRobo.class) 注释添加到 ITestRobo 来执行此操作,也可以在 configure() 方法中添加模块和 bind(ITestRobo.class).to(TestRobo.class)。

于 2012-09-11T19:39:25.570 回答