2012-03-30 52 views
4

我希望非编码员能够使用Guice进行依赖注入,从而以最少的代码更改映射新的“测试”类型。我喜欢简单,但不是明显缺乏类型安全。任何建议,使这更好​​?输入依赖项注入的类型安全枚举

public enum TestType { 

    TEST_TYPE_1("TEST-1", Test1.class), 
    TEST_TYPE_2("TEST-2", Test2.class), 
    TEST_TYPE_3("TEST-3", Test3.class), 
    TEST_TYPE_4("TEST-4", Test4.class), 
    TEST_TYPE_5("TEST-5", Test5.class); 

    private final String testType; 
    private final Class<TestIF> tester; 

    private <TestIF> TestType(String testType, Class<TestIF> tester) {  
     this.testType = testType; 
     this.tester = (Class<tester.TestIF>) tester; 
    } 

    public String toString() { 
     return this.testType; 
    } 

    public Class<TestIF> tester() { 
     return this.tester; 
    } 
} 

“测试”将被实例化这样的:

TestIF tester = Guice.createInjector().getInstance(testType.tester());  
tester.execute(); 
+0

由于您使用'TestIF'作为泛型类型*参数*和具体类(接口)名称,因此您对泛型的使用有点混淆。你能清理这个歧义吗? – 2012-03-30 17:04:57

+0

如果用T替换泛型类型TestIF,会怎样扩展TestIF? – 2012-03-30 17:06:48

+0

@GuillaumePolet是的,我相信应该有所帮助,虽然我需要使用?在构造函数中扩展TestIF。它强制我的测试来实现TestIF,对我来说这应该足够了。 – Dustin 2012-03-30 20:30:37

回答

0

这有助于迫使测试实施TestIF,这是在这种情况下,多了一点安全。

public enum TestType { 

TEST_TYPE_1("TEST-1", Test1.class), 
TEST_TYPE_2("TEST-2", Test2.class), 
TEST_TYPE_3("TEST-3", Test3.class), 
TEST_TYPE_4("TEST-4", Test4.class), 
TEST_TYPE_5("TEST-5", Test5.class); 

private final String testType; 
private final Class<? extends TestIF> tester; 

private <T extends TestIF> TestType(String testType, Class<? extends TestIF> tester) {  
    this.testType = testType; 
    this.tester = (Class<tester.TestIF>) tester; 
} 

public String toString() { 
    return this.testType; 
} 

public Class<? extends TestIF> tester() { 
    return this.tester; 
}