Java - в одном методе выбор количества параметров

Рейтинг: 0Ответов: 2Опубликовано: 10.04.2015

Класс Segment. Есть в нём метод segmentLenght(). В методе segmentLenghtSum() есть два параметра obj_1 и obj_2, метод возвращает сумму методов segmentLenght():

private int segmentLenghtSum(Segment obj_1,Segment obj_2)
{
    return (segmentLenght(obj_1) + segmentLenght(obj_2));
}

Я не всегда имею объект obj_2 и меня устраивает сокращённый код:

private int segmentLenghtSum(Segment obj_1)
{
    return (segmentLenght(obj_1));
}

который сам по себе большого смысла не имеет. Можно ли объединить эти два метода в один так, чтобы я мог вводить один или два параметра - в случае введения двух параметров выполнялся бы первый код, в случае одного - второй?

Ответы

▲ 3

Можно написать такой метод:

private int segmentLenghtSum(Segment... params){
    int result = 0;
    for (Object p : params)
        result += segmentLenght(p);
    return result;
}

Пример использования:

Segment obj1, obj2, obj3;
Segment[] objects = new Segment[]{ obj1, obj2, obj3 };
int sum = segmentLenghtSum(obj1, obj2, obj3);
int sum2 = segmentLenghtSum(objects);
▲ 2

Java не поддерживает параметры по умолчанию, но вы можете легко проэмулировать их:

private int segmentLenghtSum(Segment obj_1)
{
    return segmentLenghtSum(obj_1, null);
}

private int segmentLenghtSum(Segment obj_1, Segment obj_2)
{
    int result = 0;
    if (obj_1 != null)
        result += segmentLenght(obj_1);
    if (obj_2 != null)
        result += segmentLenght(obj_2);
    return result;
}

В вашем случае код простой, и можно просто определить два метода, но если код сложный и надо избежать его повторения, делайте как в моём примере.


Но всё же, плииииииз! length, а не lenght!