2011-10-27 66 views
3

我这样做了很多在我的代码,有很多二维坐标的工作原理:的Java:从一个方法调用返回两个整数

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

我知道,我可以定义一个很小的类,并得到类型安全,但我还没有,因为它让我感到在它自己的一个小的.java文件中有这样一个微不足道的类,我必须将它合并到我的代码中。

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

回答

0

不幸的是,在java中,这实际上是返回多个值的最好方法。我通常使用数组或列表。我不一定认为这是一种“糟糕的形式”,本身就是为它创建一个班级,但这是不必要的。

12

如果您的项目中有一个想要封装的概念,例如,这两个整数是坐标,那么为它们设置类没有任何问题。在我看来,这是很清洁,然后迫使每个人都创建一个数组等。

例如,是否有人在同一个项目中开发并调用你的方法,你认为它更清晰的获得一个int数组两个位置,还是称为坐标的对象?另外,你可能想要实现比较坐标的东西,如果你使用了一个类,它可以用正确的OO方式封装。 (如果你重新定义了类似的东西,请记得尊重Object contract)。

2

,你可以将它定义为一个嵌套的静态类

更不用说类将允许更多的(例如定义操作的2D 1点坐标,把它们放在一个组(等于没有按” t就像阵列上那样工作))

3

在这种情况下,您可以使用Point。一般而言,除了美学之外,通常有足够的微不足道的辅助方法涉及到类似的事情,因此让它成为一个类来保存它们是有意义的,而不是将逻辑分散到各处。有时甚至只需要一个很好的toString()来进行调试和记录就足够了。

在需要非常高的性能的地方,请将高流量的简单辅助方法作为最终的方法,以便它们可以内联。

潜在成员的唯一共同点是他们是由一个函数返回的,如果你能看到他们有更多共同点的未来,那么肯定会创建一个类。

在某些情况下,请考虑返回void,并传入某种类型的较大范围的上下文对象,方法可以在该对象上设置返回值。这应该谨慎使用 - 它可以很容易地导致耦合蠕变。

0

鉴于Java无法从方法返回多个值,因此您所做的只是返回相同类型的多个值的唯一选择。如果这些值来自不同类型,则必须编写一个小类(一个排序值对象)来封装返回值。

另一个甚至最丑陋的选择是将数组作为参数传递,并在那里留下返回值 - 这是一种用于模拟Java中的传递引用的黑客攻击。非常气馁。

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) 。如果该类不是“静态”的,那么如果没有外部类的实例,就不能创建它的新实例。

相关问题