Java: повертає два ints з виклику методу

Я роблю це багато в коді, який працює з великою кількістю 2-х мірних координат:

int[] getSize() {
    int[] res = {gridRows, gridColumns};
    return res;
}

Я знаю, що я можу визначити крихітний клас і отримати безпеку типу, але я не тому, що це дратує мене, щоб мати такий тривіальний клас в його власний маленький тривіальний файл .java, що я повинен включити в свій код.

Чи вважаєте ви, що це потворно, погано або зле? Або ви це робите?

3

6 Відповіді

Якщо у вашому проекті існує концепція, яку ви хочете інкапсулювати, наприклад, з цих двох ints є координатами, немає нічого поганого в тому, щоб мати для них клас. На мою думку, це дуже чисте, тож змушує всіх створювати масив тощо.

Наприклад, чи хтось інший розвивається в одному проекті і викликає ваш метод?

Крім того, ви можете реалізувати такі речі, як порівняння координат, які можуть бути інкапсульовані правильним чином, якщо ви використовуєте клас. (Будь ласка, не забувайте дотримуватися об'єкта контракту якщо ви перевизначили щось подібне рівним).

12
додано

У цьому випадку можна скористатися точкою .

Загалом, в сторону естетики, часто є достатньо тривіальних допоміжних методів, пов'язаних з чимось на зразок цього, що має сенс зробити клас для того, щоб він містив їх, а не розкидати цю логіку. Іноді достатньо підстав навіть для того, щоб мати хороший toString() для налагодження і реєстрації.

Там, де дуже висока продуктивність викликає занепокоєння, зробіть тривіальні допоміжні методи високого трафіку остаточними, щоб вони могли бути вбудовані.

Там, де єдине, що є спільними у потенційних членів, є те, що вони повертаються функцією, безумовно, роблять клас, якщо ви бачите майбутнє, де вони мають більше спільного.

У деяких випадках розглядають повернення void і передачу в контексті більшого об'єкта деякого роду, на якому метод може встановити значення повернення. Це слід використовувати з великою обережністю - він може легко викликати повзучість зчеплення.

3
додано

Ви можете визначити його як вкладений статичний клас

не кажучи вже про те, що клас дозволив би набагато більше (наприклад визначити операції на 2D координатах в 1-му місці, покласти їх у набір (рівний не працює так, як на масивах))

2
додано

Ви можете створити внутрішній клас для зберігання повернутих значень методу. Це має перевагу, що не вимагає нового файлу .java:

public class Parent{
  public Size getSize() {
    return new Size(gridRows, gridColumns);
  }

  public static class Size{
    //...
  }
}

Parent parent = new Parent();
Parent.Size size = parent.getSize();

Визначення класу як "статичного" в основному означає, що його можна розглядати так само, як звичайний клас (за винятком того, що потрібно використовувати Parent.Size замість Розмір ). Якщо клас не є "статичним", то ви не можете створити новий екземпляр, не маючи примірника зовнішнього класу.

1
додано

На жаль, у java це дійсно найкращий спосіб повернути кілька значень. Зазвичай я використовую або масиви, або списки. Я не обов'язково думаю, що це "погана форма", як така, створити клас для нього, але це не потрібно.

0
додано

Враховуючи, що Java не може повернути декілька значень із методів, ви робите лише вибір для повернення декількох значень того ж типу . Якщо значення знаходяться з різних типів, то для інкапсуляції повернутих значень вам доведеться написати невеликий клас (об'єкт значення).

Ще одна, навіть найпохмуріша опція, полягає в тому, щоб передавати масиви як параметри і залишити там значення, що повертаються - це хак для імітації передачі-посилання на Java. Дуже збентежений.

0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників