1
    Comparable w[] = new Comparable[5];
    w[0] = 1;
    w[1] = "string";
    w[2] = 2.0;

这是一个好方法吗?实际上为什么它会起作用(我只是随机尝试)?也许是因为 Comparable 扩展了整数、字符串、双精度等?所以呢?

4

6 回答 6

5

这是一个好方法吗?

如果你想不出做某事的好理由,那可能不是一个好主意。;)

也许是因为 Comparable 扩展了整数、字符串、双精度等?

数字和字符串实现了 Comparable,但您的想法是正确的。

所以呢?

你可以在 Java 中做很多奇怪的事情,但大多数都没有用。;)

在这种情况下,它并不是特别有用,因为对象彼此不可比较。例如 Arrays.sort(w); 不会工作。

于 2012-08-31T09:49:02.217 回答
2

这行得通,但没有多大意义。IntegerString并且Double确实实现了Comparable接口,但是以通用的方式(即Integer实现Comparable<Integer>String实现Comparable<String>等)。

因此,如果这是您要实现的目标,您将无法将 aString与 a进行比较。Double

于 2012-08-31T09:47:27.597 回答
2

我不认为这是一个好主意。如果Object[]您必须存储这样的“异构”集合,请使用。指定Comparable为通用接口也会给出错误的建议,即您可以对数组进行排序,这是错误的,因为不同的比较器不能合作。

于 2012-08-31T09:47:59.750 回答
1
Comparable w[] = new Comparable[5];

这构造了一个实现可比较接口的项目数组。标准类型的所有包装器都实现了这个接口,所以所有东西都可以存储在那里。这样做的缺点是比较方法用于在同一类的对象之间进行比较。将不同类别的物品放入此容器中会破坏该目的。

因此,使用 Comparable 接口作为容器的基本类型可能是个坏主意。因为没有意义。

更好的选择是使用 Object[],它是所有 Java 对象的超类型。

于 2012-08-31T09:54:28.190 回答
0

使用定义要存储在数组或集合中的对象的通用有用属性的类接口。

如果您compareTo直接或不直接使用该方法,例如通过对数组进行排序,请使用 Comparable。如果不使用 Object,因为这对读者来说不会那么混乱。如果不是,请注意选择 Comparable 而不是 Object 这不会以有用的方式限制数组的对象,因为有许多实现它的类(并且它正在增长)。

但请注意,您很少需要将字符串、双精度数和整数存储在数组中。您必须这样做是一个信号,您应该检查您的设计。

于 2012-08-31T09:48:45.477 回答
0

-所有Wrapper Objects工具Comparable,这就是它的工作原理。

-此外,当您只需要根据一个参数进行排序时,Comparable 很好,Comparator但当您想要以多种方式排序时使用它会很好......

于 2012-08-31T09:50:32.917 回答