我在我的代码中经常使用很多2维坐标:
int[] getSize() {
int[] res = {gridRows, gridColumns};
return res;
}
我知道我可以定义一个小类并获得类型安全,但我没有因为它让我感到烦恼的是它有一个非常简单的类,它必须包含在我的代码中的小文件.java文件中。
你认为这是丑陋的,坏的还是邪恶的?或者你也这样做?
答案 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。非常沮丧。