在Java中声明循环内的重复变量

时间:2013-12-06 15:56:43

标签: java eclipse variables selenium

我希望能够根据用户选择在循环中声明一个selenium驱动程序。我希望驱动程序被称为驱动程序,无论它是哪种类型,因此我可以将其用于所有内容,而不是为IE和Firefox分别设置一组代码。我希望这是有道理的,我对Java很新。

 switch (browserId){
    case 1: 
            FirefoxDriver driver = new FirefoxDriver();

    case 2:

        InternetExplorerDriver driver = new InternetExplorerDriver();

    default: 
            System.out.println("An error has occurred, the program will now close.");
        System.exit(0);
    }

这会产生一个编译错误,因为我有两个名为driver的变量,但是我不应该同时存在它们。有办法解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

  

我希望驱动程序被称为驱动程序,无论它是哪种类型,   这样我就可以将它用于一切而不是一个   用于IE和Firefox的单独代码集。

如果这两个类都实现了Driver接口(或者是WebDriver?),那么你可以简单地执行

Driver driver = null;
switch (browserId){
case 1: 
    driver = new FirefoxDriver();
    break;
case 2:
    driver = new InternetExplorerDriver();
    break;
default: 
    System.out.println("An error has occurred, the program will now close.");
    System.exit(0);
}

现在您可以使用driver,但请检查null

您无法执行此操作的原因是switch块开始范围。如果声明名为driver的变量,则无法在同一范围内重新声明具有相同名称的另一个变量。

答案 1 :(得分:1)

你可以这样做:

WebDriver driver;                     // <-- move outside the switch
switch (browserId){
    case 1:
        driver = new FirefoxDriver();
        break;                        // <-- add breaks
    case 2:
        driver = new InternetExplorerDriver();
        break;
    default:
        // exceptions are more welcome than System.exit();
        throw new IllegalArgumentException("wrong browserId: " + browserId);
}

答案 2 :(得分:0)

如果它们都来自公共类型,则在变换器外部声明变量。

Driver d = null;

switch(browserId){
     case 1: 
         d = new FireFoxDriver();
         break; // don't forget!!
     case 2: 
         d = new InternetExplorerDriver();
         break;
     ... // omitting other cases and default

}

如果没有,那么你需要在每个case语句中使用不同的名称。