Java 参数数目可变的接口的方法

Java 参数数目可变的接口的方法,java,interface,Java,Interface,我想问一下,在Java中,是否可以在接口中声明一个方法,但是,我希望定义的方法可以有数量可变的输入参数(例如,所有相同类型的参数)。我是这样想的: public interface EqualsCriteria { public boolean isEqual(String... paramsToCheck); // this is not equals(Object obj) !!! } 一个类实现了相同的标准,例如: public class CommonEquals

我想问一下,在Java中,是否可以在接口中声明一个方法,但是,我希望定义的方法可以有数量可变的输入参数(例如,所有相同类型的参数)。我是这样想的:

public interface EqualsCriteria {

    public boolean isEqual(String... paramsToCheck); 
    // this is not equals(Object obj) !!!

}
一个类实现了相同的标准,例如:

public class CommonEquals implements EqualsCriteria {
    private String name;
    private String surname;

    ....
    @Override
    public boolean isEqual(String otherName, String otherSurname) {
        return name.equals(otherName) && surname.equals(otherSurname);
    }

}
但也许,我想在代码的另一部分使用其他标准,比如

public class SpecialEquals implements EqualsCriteria {
    ....
    @Override
    public boolean isEqual(String otherName, String otherSurname, String passport) {
        return name.equals(otherName) && surname.equals(otherSurname) && passport.equals(passport);
    }

}

PS:实际上我的问题有点复杂,但这对我来说可能有用。

您可以通过检查数组的大小来实现这一点

public class CommonEquals implements EqualsCriteria {
private String name;
private String surname;

....
@Override
public boolean isEqual(String .. arr) {
    if (arr.length != 2) {
         throw new IllegalArgumentException();  // or return false
    }
    return name.equals(arr[0]) && surname.equals(arr[1]);
}
}
编辑

只有这样才能使其更具可读性(提取公共部分)

另外一节课你有

@Override
public boolean isEqual(String otherName, String otherSurname, String .. arr) {
    return name.equals(otherName) && surname.equals(otherSurname) && passport.equals(arr[0]);
}
更好的办法是:

public interface EqualsCriteria {
    public boolean isEqual(EqualsCriteria other); 
    public String[] getParam();
    // this is not equals(Object obj) !!!
}
然后:

public class CommonEquals implements EqualsCriteria {
    private String name;
    private String surname;


    @Override
    public boolean isEqual(EqualsCriteria other) {
     if(other==null) return false;
     return Arrays.asList(getParam()).equals(Arrays.asList(other.getParam()));
    }

    }
这样,即使字符串的数量发生变化,它仍然可以工作

公共接口标准{

公共布尔isEqual(ArrayList参数)

}


在resume中,您不能修改函数的参数数量,因为它不是重写。

为什么不亲自尝试并查看它?字符串的给定实现。。。表单可以查看参数的实际数量,并在此基础上调用其他方法。如果您想要相同类型的可变数量的参数,只需使用数组即可。我认为不需要。但另一种选择是
公共布尔isEqual(String[]paramsToCheck)因为您正在尝试更改接口defnYeah,所以这是一个解决方案。但是为了更具可读性,我想使用您要检查的参数的显式声明,如姓名、姓氏、护照等。
public class CommonEquals implements EqualsCriteria {
    private String name;
    private String surname;


    @Override
    public boolean isEqual(EqualsCriteria other) {
     if(other==null) return false;
     return Arrays.asList(getParam()).equals(Arrays.asList(other.getParam()));
    }

    }