6

我想问您是否可以在 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:实际上我的问题有点复杂,但这可能对我有用。

4

3 回答 3

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]);
}
于 2013-08-07T15:58:18.730 回答
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()));
    }

    }

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

于 2013-08-07T16:00:35.810 回答
0

公共接口 EqualsCriteria {

公共布尔 isEqual(ArrayList 参数);

}

在简历中你不能修改函数的参数数量,因为不是覆盖。

于 2013-08-07T16:12:13.287 回答