具有可变数量参数的接口的方法

时间:2013-08-07 15:51:16

标签: java interface

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

3 个答案:

答案 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);

     

}

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