2013-08-01 2 views
0

Я использую большое количество привязки к сетке в моем проекте, и, таким образом, я создал класс для сохранения пар значений x, y, но поскольку я не хотел ходить вокруг instancing объекты для сохранения пар значений, я просто храню обычные парные пары, поэтому я знаю, что если я всегда храню и получаю их по парам, у меня не будет никаких проблем. Теперь я также хочу, чтобы классы, использующие эту структуру Path, получали и получали значения парами. Чтобы дать значения, я бы просто использовал параметры, и он будет работать нормально, но для получения значений я не знаю, как это сделать. В C++, как правило, я хотел бы сделать «возвращение по ссылке»:Возвращающиеся пары значений

void getNextPointInPath(float& x, float& y) { 
    //And I set x and y to be the next pair of values in the 
} 

Но я застрял в том, как сделать это Java, так как весь смысл этого не будет инстансов классов, чтобы вернуть их каждый раз, когда я вызывать метод getter, я не могу использовать класс, который содержит float для передачи, поэтому я смогу имитировать пропуск по ссылке (И я имею в виду симулировать, а не на самом деле. Я знаю, что передача по ссылке невозможна в java), есть ли хороший способ сделать это на Java?

EDIT: Я прочитал это снова, и, возможно, я не объяснил себе достаточно ясно. Когда я говорю пары, я имею в виду один за другим, я использую LinkedList < Float> для хранения очков.

+1

* Почему бы вам не создать новый объект для представления пары значений? –

+0

Потому что это означало бы, что класс, использующий класс Path, также должен знать об этой новой структуре данных, а это также означает, что мне нужно будет создавать объекты с новыми, чтобы их вернуть, когда мне просто нужно вернуть два одиночных значения. Конечно, я мог бы создать некоторый общий класс, такой как Pair в C++, но все дело в том, чтобы сделать класс Path простым в использовании, и я не чувствую, что возврат пользовательских объектов - лучший способ. Возможно, это потому, что я все еще думаю на C++, а не на Java. – Setzer22

+0

Да, похоже, что это вопрос не думать на Java. Если вы хотите вернуть пару значений, инкапсулируйте их в объект. –

ответ

2

Непонятно, пытались ли вы на самом деле попытаться создать новый объект для возврата из метода каждый раз. Это была бы моя первая попытка - если вы беспокоитесь о производительности, вы можете решить это, когда вы действительно доказали, что это проблема. Создайте неизменный класс Point (вероятно, с equals и hashCode переопределенными для тестирования, но будьте осторожны с нормальными проблемами с плавающей запятой) и переопределенным toString. Это будет довольно коротко и должно быть вашим универсальным способом представления точки. Тогда ваша подпись метода выглядит намного более разумным:

public Point getNextPointOnPath() { 
    ... 
} 

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

Следующим вариантом будет создание изменяемого типа, содержащего пару поплавков. Передайте ссылку на существующий объект в, и пусть метод мутирует объект.

Наконец, вы можете вернуть long, который содержит битовую диаграмму двух значений float. (Используйте Float.floatToIntBits на каждом из float и используйте один из них как верхние 32 бита и один как нижние 32 бита long.) Но это ужасно, и это не сработает для больших типов данных.

+0

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

+1

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

+0

@ Setzer22: Вы все еще не представили никаких причин не создавать такой класс, отличный от того, что вам не нравится ... –

Смежные вопросы