Comparable w[] = new Comparable[5];
w[0] = 1;
w[1] = "string";
w[2] = 2.0;
这是一个好方法吗?实际上为什么它可以工作(我只是随机尝试)?也许是因为Comparable扩展了Integers,Strings,Doubles等?那是什么?
答案 0 :(得分:5)
这是一个好方法吗?
如果你不能想出做某事的好理由,那可能不是一个好主意。 ;)
也许因为Comparable扩展了Integers,Strings,Doubles等?
Numbers和Strings实现了Comparable,但你有正确的想法。
那又怎样?
你可以在Java中做很多奇怪的事情,但是大多数都没有用。 ;)
在这种情况下,它不是特别有用,因为对象不能相互比较。例如Arrays.sort(W);不行。
答案 1 :(得分:2)
这有效,但没有多大意义。 Integer
,String
和Double
确实实现Comparable
接口,但采用通用方式(即Integer
实现Comparable<Integer>
,{{1}实现String
等。)。
因此,如果这是您要实现的目标,那么您将无法将Comparable<String>
与String
进行比较。
答案 2 :(得分:2)
我不认为这是个好主意。如果您必须存储此类“异构”集合,请使用Object[]
。
将Comparable
指定为公共接口也会给出错误的建议,即您可以对数组进行排序,这是错误的,因为不同的比较器不能合作。
答案 3 :(得分:1)
Comparable w[] = new Comparable[5];
这构造了一个实现类似接口的项目数组。 标准类型的所有包装器都实现了这个接口,所以一切都可以存储在那里。 这样做的缺点是比较方法用于比较同一类的对象。将不同类别的项目放入此容器中会失败。
因此,使用Comparable接口作为容器的基本类型可能是个坏主意。因为它没有意义。
更好的选择是使用Object [],它是所有Java对象的超类型。
答案 4 :(得分:0)
使用类的接口定义要存储在数组或集合中的对象的常用有用属性。
如果您直接或不使用compareTo
方法,例如通过对数组进行排序,请选择Comparable。如果不采取对象,因为这对读者来说不那么混乱。如果没有,请注意选择Comparable而不是Object这不会以有用的方式限制数组的对象,因为有许多类实现它(并且它正在增长)。
但请注意,您很少需要存储数组字符串,双精度和整数。事实上,你必须检查你的设计。
答案 5 :(得分:0)
- 所有Wrapper Objects
实施Comparable
,以及它是如何运作的。
- 此外,当您需要仅根据一个参数进行排序时,可比性很好,但是当您想要<{1}}时,最好使用Comparator
strong>以多种方式排序......