0

我想从类路径调用方法路径。我需要在入口处设置一些数字 - 数组长度和适当的数组值。这是我的课:

class Path {
 int number;
 String[] path_name = new String [number];
 Path (int n, String [] p){
     number=n; 
     path_name=p; 
 }
public void path(){
 for (int i=1; i<number; i++){
     driver.findElement(By.linkText(path_name[i])).click();  
 }
}

}

这就是我尝试调用方法的方式:

Path pa = new Path (6,'array value');
  pa.path();

但我不知道如何正确启动“数组值” - 例如,我需要设置“一”、“二”、“三”。有人可以帮忙吗?

我不知道开头的数组长度,所以我不能在构造函数中定义几个字符串

4

5 回答 5

2

你的班级有很多问题。

首先直接写入类变量的变量的初始化是在构造函数体执行之前完成的。因此,您对数组的初始化path_name将始终使用默认值numberand完成0。这可行,但您的数组将无法以这种方式存储任何值。

现在在你的身体里,我猜你试图用path_name数组的内容填充你的p数组。但是,您替换了实例。这工作得很好,但如果有人在类之外更改数组,它也会在这个类中更改。我猜您想使用System.arraycopyor传输值Arrays.copyOf

对于您的构造函数的调用,您必须调用如下内容:

new Path(6, new String[] {"one", "two", ...});

作为改进,我建议您完全删除该number变量,因为您可以随时使用path_name.length.

您可能想要研究的另一件事是可变长度参数。如果您像这样更改构造函数:

Path(int n, String p...){
     number=n; 
     path_name = p
}

您设置在构造函数调用中的数字之后添加未定义数量的字符串。所有这些字符串都自动打包在一个名为 的字符串数组中p。由于此数组仅存在于此构造函数中,因此您可以安全地复制实例而不是变量。构造函数的调用如下所示:

new Path(6, "one", "two", ...);
于 2012-07-18T14:42:31.970 回答
1

尝试类似:

Path pa = new Path(6, String[] {"one", "two", "three"} );

如果您可以更改代码,您可能可以使用 varargs 使其更容易:

Path (int n, String p...) 

然后你可以:

Path pa = new Path(6, "one", "two", "three");
于 2012-07-18T14:33:15.183 回答
0

如果我理解您的要求正确,我认为这就是您想要的-

class Path { 
 int number; 
 String[] path_name; 
 Path (int length){ 
     path_name = new String[length];
     for(int i=1;i<=length;i++)
         path_name[i-1] = Integer.ToString(i); 
 } 
} 

这假设您希望数组为 1...n。如果你想要任何你想要的字符串元素,我认为这可能是一个更好的解决方案,我会做

 class Path { 
 int number; 
 String[] path_name; 
 Path (String p){ 
     path_name = p;
 }


 public void some_method(){ 
    String[] a = {"one", "two", "three"};
    Path p = new Path(a);
 }
 } 
于 2012-07-18T14:36:59.950 回答
0

您可以在 Path 实例化之前初始化一个 String 数组,如下所示:

String[] p = {"one", "two", "three"};
Path pa = new Path(6, p);
于 2012-07-18T14:37:03.077 回答
0

如果您接受数组的所有元素都是路径的有效元素的不变量,则可以消除您引用的 n 数字。

考虑到这一点,您可以简单地拥有

class Path {
    final String[] pathNames;
    // uses var args
    Path(String... paths) {
         pathNames = paths;
    }
    void path() {
        // uses enhanced for loop
        for(String path : pathNames) {
            driver.findElement(By.linkText(path)).click();
        }
    }
}

一些批评:

  • number创建对象时,您当前正在创建一个大小数组。但此时数字为 0。所以你正在创建一个空数组。
  • 但是上述观点无关紧要,因为您正在立即重新分配参考...
  • 因为您不是在防御性地复制数组,所以一些外部代码可能会修改数组的元素。这可能不是一件好事。(这是由 var args 解决的,其中没有外部代码可以访问该数组。你不能阻止某人传递一个数组而不是 var args,但他们至少会意识到你期望 var args ,因此如果他们愿意,他们仍然有能力在内部进行更改,但不太可能以这种方式意外引入错误。)
于 2012-07-18T14:38:50.403 回答