Java 依赖项注入的类型安全枚举

Java 依赖项注入的类型安全枚举,java,enums,guice,Java,Enums,Guice,我想为非编码人员提供一种简单的方法,使用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(

我想为非编码人员提供一种简单的方法,使用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,在这种情况下,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;
}
公共枚举测试类型{
测试类型1(“测试1”,测试1.class),
测试类型2(“测试2”,测试2.class),
测试类型3(“测试3”,测试3.class),
测试类型4(“测试4”,测试4.class),
测试类型5(“测试5”,测试5.class);
私有最终字符串testType;

private final class鉴于您将
TestIF
用作泛型类型参数和具体类(接口),因此泛型的使用在这里有点混乱名称。你能消除这种歧义吗?如果你用T extends TestIF替换你的泛型类型TestIF会怎么样?@GuillaumePolet是的,我相信这会有帮助,尽管我需要在构造函数中使用?extends TestIF。它迫使我的测试实现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;
}