我想问你是否可以在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:实际上我的问题有点复杂,但这对我有用。
答案 0 :(得分:3)
您可以通过检查数组的大小来实现此目的
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 oName, String oSurname, String .. arr) {
return name.equals(oName) && surname.equals(oSurname); //ignore arr since you don't need it
}
对于其他课程,你会有
@Override
public boolean isEqual(String otherName, String otherSurname, String .. arr) {
return name.equals(otherName) && surname.equals(otherSurname) && passport.equals(arr[0]);
}
答案 1 :(得分:1)
更好的方法是:
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()));
}
}
这样,即使字符串数量发生变化,它仍然可以正常工作。
答案 2 :(得分:0)
公共接口EqualsCriteria {
public boolean isEqual(ArrayList parameter);
}
在简历中你无法修改,函数的参数数量,因为不是覆盖。