Java:从方法调用返回两个int

时间:2011-10-27 13:34:30

标签: java class methods

我在我的代码中经常使用很多2维坐标:

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

我知道我可以定义一个小类并获得类型安全,但我没有因为它让我感到烦恼的是它有一个非常简单的类,它必须包含在我的代码中的小文件.java文件中。

你认为这是丑陋的,坏的还是邪恶的?或者你也这样做?

6 个答案:

答案 0 :(得分:12)

如果项目中有一个想要封装的概念,例如,这两个整数是坐标,那么为它们设置一个类就没有错。在我看来,这是更清洁,然后强迫每个人创建一个阵列等。

例如,是否有其他人在同一个项目中开发并调用您的方法,您是否认为他们更清楚地获得具有两个位置的int数组,或者称为Coordinates的对象?

此外,您可能希望实现诸如比较坐标之类的内容,如果您使用类,则可以以正确的OO方式封装。 (如果你重新定义了类似的东西,请记得尊重Object contract

答案 1 :(得分:3)

在这种情况下,您可以使用Point

一般来说,除了美学之外,通常有足够的琐碎助手方法与这样的事情有关,因此为它制作一个类来保持它们是有意义的,而不是将这种逻辑分散在各处。有时甚至只需要一个好的toString()来进行调试和记录就足够了。

如果需要考虑非常高的性能,请将高流量的简单助手方法设为最终,以便将它们内联。

潜在成员唯一的共同点就是他们被一个函数所返回,如果你能看到一个他们有更多共同点的未来,肯定会上课。

在某些情况下,请考虑返回void,并传入某种更大范围的上下文对象,该对象可以在该对象上设置返回值。这应该非常谨慎使用 - 它很容易引起耦合蠕变。

答案 2 :(得分:2)

您可以将其定义为嵌套的静态类

更不用说该类将允许更多(例如,在1个点中定义2D坐标上的操作,将它们放在一个集合中(等于在数组上不像那样工作))

答案 3 :(得分:1)

您可以创建一个内部类来保存方法的返回值。这样做的好处是不需要新的.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而不是Size)。如果该类不是“静态”,那么如果没有outter类的实例,则无法创建它的新实例。

答案 4 :(得分:0)

不幸的是,在java中,这确实是返回多个值的最佳方法。我通常使用数组或列表。我不一定认为为它创建一个类是“糟糕的形式”,但这是不必要的。

答案 5 :(得分:0)

鉴于Java无法从方法返回多个值,您正在做的是返回同一类型的多个值的唯一选择。如果值来自不同的类型,则必须编写一个小类(一个值类的对象)来封装返回值。

另一个,甚至是最丑陋的选择,是将数组作为参数传递并留下返回值 - 用于模拟Java中的传递引用的hack。非常沮丧。