Java //冗余

时间:2019-01-20 03:09:41

标签: java

我有下面提供的“示例代码”,我发现这非常多余,并且想请您与我一起解释是否有更少的冗余方式来处理以下代码。

public interface Bars {

    FOO1 FOO1 = (FOO1) get(FOO1.class);
    FOO2 FOO2 = (FOO2) get(FOO2.class);
    FOO3 FOO3 = (FOO3) get(FOO3.class);
    FOO4 FOO4 = (FOO4) get(FOO4.class);

    static Bar get(Class<? extends Bar> clazz) {
        return (Bar) FooBar.GET.getBars().get(clazz);
    }

非常感谢:)

3 个答案:

答案 0 :(得分:4)

我们需要更多的建议来建议是否可以完全删除此代码(看起来像您想使用DI框架),但是您可以使get方法通用,使其返回与其参数相同的类型:

static <T extends Bar> T get(Class<T> clazz);

这将消除呼叫方的类型转换。

答案 1 :(得分:3)

您应该可以这样写:

private static void enterMondoZoo(ChromeDriver driver){
    lg.info("Entering in mondoZoo:");
    driver.get("http://www.mondozoo.com");
    driver.findElement(By.className("mbarlog")).click();
    try {
        Thread.sleep(10000); //not the best wait in the world
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    driver.switchTo().frame("framebarrelogin");
    //Do all your login actions here
    driver.findElement(By.xpath("//*[@id='loginform']/div[3]/form/div[1]/p[2]/input")).sendKeys("random");
    //Login actions completed
    driver.switchTo().defaultContent();
    lg.info("Leaving the enteringMondoZoo");
}

根据public interface Bars { Foo1 FOO1 = get(Foo1.class); Foo2 FOO2 = get(Foo2.class); Foo3 FOO3 = get(Foo3.class); Foo4 FOO4 = get(Foo4.class); static <T extends Bar> T get(Class<T> clazz) { return clazz.cast(FooBar.GET.getBars().get(clazz)); } } 方法的声明结果类型,可能不需要进行cast(...)调用。

在那之后,我认为没有一种更好的方法来初始化具有不同类型的4个不同变量。

如果这些是局部变量,并且使用的是Java 10或更高版本,则可以使用新的get(Class)语法,这样就无需在声明中提及类型。 (可以从初始化表达式中推断出类型。)

但是,这不适用于这种情况,因为您的示例将这些变量显示为接口的字段。 var语法只能在局部变量的声明中使用。

答案 2 :(得分:2)

get方法更改为:

static <T extends Bar> T get(Class<T> clazz) {
    return clazz.cast(FooBar.GET.getBars().get(clazz));
}

您现在可以调用它而无需重复类型:

var foo1 = get(Foo1.class);
var foo2 = get(Foo2.class);

var语法仅适用于Java 10+。在Java 10之前,您需要:

Foo1 foo1 = get(Foo1.class);
Foo2 foo2 = get(Foo2.class);

请注意,我已将字母更改为小写以符合Java命名约定。