2012-03-20 1 views
0

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

Код здесь:

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; 
    } 
} 

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

+1

Ummm ... ну нет ничего особенного * неправильного * с этим, поэтому это законная Java. Но это кажется совершенно бесполезным. Зачем тебе это? –

+0

Зачем возвращать ссылку на объект, который у вас уже есть? – hmjd

+0

Попробуйте написать код, который будет использовать пару, и вы должны понимать, что получатель, который вы написали, не очень полезен, поскольку у вас уже есть пара ... – assylias

ответ

1

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

Pair getCoordinates() { 
    ... 
} 

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

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

0

Нет, это совсем не нормально, чтобы вернуть ссылку на с геттера. Увидев, как будто вы звоните 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.

0

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

Это совершенно нормально, чтобы иметь два отдельных аксессоров:

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

public int getSecondInt() { 
    return this.p2; 
} 
1

Метод 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(); 
0

Внедрение 2 метода получения.

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

public int getP2() { 
    return this.p2; 
} 
Смежные вопросы