Метод пары getPair класса - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь создать класс, который будет действовать как пара целых.Я хочу создать метод получения, который возвращает пару, но я не решаюсь написать, как это выглядит странно, и я хочу знать, законно ли это делать на Java или нет.

Код здесь:

public class Pair
{
    private int p1;
    private int p2;

    public Pair (int p1, int p2) {
        this.p1 = p1;
        this.p2 = p2;
    }

    public Pair getPair () {
        return this;
    }
}

И это хороший способ вернуть пару, или есть оптимальный способ сделать это?

Ответы [ 5 ]

1 голос
/ 20 марта 2012

Метод getPair() является избыточным: при создании нового Pair у вас уже будет ссылка на него;например,

Pair p1 = new Pair(3,5);
Pair p2 = p1.getPair();
assert p1 == p2; // p1 and p2 refer to the same object.

Следовательно, getPair() бесполезен.Обратите внимание, что одно допустимое использование для метода, возвращающего this, - при реализации шаблона компоновщика, поскольку он допускает более компактный код;например,

Foo foo = new FooBuilder().setA(1).setB("bar").setC(99.9).build();
1 голос
/ 20 марта 2012

Учитывая, что вы можете назвать getPair() на пару, зачем вам это?Конечно, у вас есть способ вернуть пару для какого-либо другого типа , например,

Pair getCoordinates() {
    ...
}

Обратите внимание, что ваше имя является очень общим (пара чего?О, пара целых чисел ...) что говорит о том, что, возможно, это должен быть универсальный тип - хотя в итоге вы получите бокс для целочисленного регистра, который вас интересует.

Хотя в прошлом я 'Если бы я поддерживал такой класс, то недавно я обнаружил, что частный вложенный тип с несколькими полями может быть более полезным для простой передачи коллекции разрозненных значений внутри определенного класса.

0 голосов
/ 20 марта 2012

Реализация 2 методов получения.

public int getP1() {
    return this.p1;
}

public int getP2() {
    return this.p2;
}
0 голосов
/ 20 марта 2012

То, что у вас уже есть, не сделает ваш класс Pair более пригодным для использования - если у вас есть ссылка на объект Pair, тогда вам не нужен другой!

Вполне нормально иметь два отдельных средства доступа:

public int getFirstInt() {
    return this.p1;
}

public int getSecondInt() {
   return this.p2;
}
0 голосов
/ 20 марта 2012

Нет, это вообще не нормально, возвращать ссылку на this из геттера.Если вы звоните getPair(), вы уже имеете ссылку на него.Теперь, если вы пытаетесь создать фабричный метод для получения новых экземпляров Pair, тогда вы можете попробовать что-то вроде этого:

public class Pair
{
    public static Pair createPair(int p1, int p2) {
        return new Pair(p1, p2);
    }

    private int p1;
    private int p2;

    public Pair (int p1, int p2) {
        this.p1 = p1;
        this.p2 = p2;
    }
}

Но даже это тривиальное дополнение, так какпрактически не дает никаких преимуществ по сравнению с использованием конструктора для создания новых Pair экземпляров.

...