Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与多个参数的接口_Java_Selenium - Fatal编程技术网

Java 与多个参数的接口

Java 与多个参数的接口,java,selenium,Java,Selenium,我创建了一个实用程序类,它有一些检查网页元素的方法。现在是重构这些方法的时候了,这样它们就属于它们自己的类,这样我就可以传递它们了 类中方法的几个存根如下所示,但它们的参数更多: public boolean checkElementExistsByText(String key, String text) {} public boolean checkElementText(String key, Predicate<String> predicate) {} public b

我创建了一个实用程序类,它有一些检查网页元素的方法。现在是重构这些方法的时候了,这样它们就属于它们自己的类,这样我就可以传递它们了

类中方法的几个存根如下所示,但它们的参数更多:

public boolean checkElementExistsByText(String key, String text) {}

public boolean checkElementText(String key, Predicate<String> predicate) {}

public boolean checkElementText(WebElement element, Predicate<String> predicate){}
我遇到了一个问题,因为我不能在checkElement方法中处理多个参数,所以我必须将它们传递给实现该方法的每个类的构造函数

public class CheckedElementExistsByText implements CheckElementInterface{
    private final WebElement element;
    private final String text;

    public CheckedElementExistsByText(WebElement element, String text) {
        this.element = element;
        this.text = text;
    }

    @Override
    public boolean checkElement() {

    }
这是最好的方法,还是有一种方法可以将多个参数传递给checkElement()方法


谢谢

您可以创建参数化界面:

interface CheckElementInterface {

boolean checkElement();

}
interface CheckElementInterface<T1, T2> {

 boolean checkElement(T1 elem1, T2 elem2);

}
正如我现在看到的:checkElementMethod中不需要参数,因为CheckElementProvider可以充当工厂

WebElement element;
String text;
checkElementInterfaceProvider.get(element, text).checkElement();  
和修改后的CheckElementInterface(现在与示例中几乎相同-只添加了类型参数):

接口检查元素接口{
布尔校验元素();
}
公共抽象类AbstractCheckElement实现CheckElementInterface{
私人最终T1 e1;
私人决赛t2e2;
公共抽象元素(T1 e1,T2 e2){
这是1.e1=e1;
这1.e2=e2;
}
}
公共类CheckedElementExistsByText实现AbstractCheckElement{
公共AbstractCheckElement(WebElement元素,字符串文本){
超级(元素、文本);
}
@凌驾
公共布尔校验元素(){
}
}

如果这些参数是特定于每个调用的,您不能在接口中将它们声明为参数吗?这是正确的方法implement@user7问题是每个方法的参数都不同。在这种情况下,您不需要这两个实例variables@user7我修改了解决方案;)
interface CheckElementInterfaceProvider {
    CheckElementInterface<T1, T2> getChecker(T1, T2);
}
WebElement element;
String text;
checkElementInterfaceProvider.get(element, text).checkElement(element, text);  
WebElement element;
String text;
checkElementInterfaceProvider.get(element, text).checkElement();  
interface CheckElementInterface<T1, T2> {
    boolean checkElement();
}
public abstract class AbstractCheckElement<T1, T2> implements CheckElementInterface<T1, T2>{
    private final T1 e1;
    private final T2 e2;

    public AbstractCheckElement(T1 e1, T2 e2) {
        this.e1 = e1;
        this.e2 = e2;
    }

}


 public class CheckedElementExistsByText implements AbstractCheckElement<WebElement, String>{
     public AbstractCheckElement(WebElement element, String text) {
        super(element, text);
     }
    @Override
    public boolean checkElement() {

    }
}