0

假设我有一个名为 Unit 的类(带有位置变量 x)并将该类扩展到 UnitA、UnitB、UnitC 等。

这是我想出的:

Unit[] ordered = new Unit[a_num+b_num+c_num];
ordered = Arrays.copyOf(a_units, a_num); //and add b_units, c_units, etc
Arrays.sort(ordered); //sort using compareTo method
  • 为了获得最佳性能和简洁的编程,从左到右(x 变量)对这些值进行排序的最佳方法是什么?
  • 对数组进行排序时,为了访问特定于单元的变量,我如何找出每个条目是什么类型的对象?
4

2 回答 2

5

如果您必须找出每个条目是什么类型的对象,那么您做错了。

多态是唯一的出路。这就是面向对象语言的用途。

你没有说你想如何对单位进行排序。您是指物理单位,例如长度为米,质量为千克,时间为秒?如果是,“排序”它们是什么意思?当然,您可以按字母顺序排列它们,但我不知道这有多大意义。

什么是“位置变量”?你的意思是你会有一个长度单位,在不同的“位置”有米、英尺、埃和弗隆等基本值?你将如何订购它们?靠人气?答案的变化取决于您是在少数几个仍然使用英制单位的国家之一(例如美国;甚至英国也放弃了英制单位!)或公制。

于 2012-11-04T14:44:36.530 回答
2

Arrays.sort(ordered)将根据单位的自然顺序(由 compareTo 方法定义)进行排序。如果自然排序不是您想要的,则使用Arrays.sort(array, Comparator)并传递一个比较单元位置的比较器。

关于你的第二个问题:你不应该知道单位的类型。您的 Unit 类应该提供您可以调用的多态方法,这些方法由每个子类实现以执行适当的操作。instanceof操作符和方法总是有的getClass(),但使用它们表明缺乏 OO 设计,因此是不好的做法。

于 2012-11-04T14:48:00.323 回答