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