|
19 | 19 | 例 `3-6`。 传统的可比较整数的代码 |
20 | 20 |
|
21 | 21 | ```java |
22 | | - interface Comparable { |
23 | | - public int compareTo(Object o); |
24 | | - } |
25 | | - class Integer implements Comparable { |
26 | | - private final int value; |
27 | | - public Integer(int value) { this.value = value; } |
28 | | - public int compareTo(Integer i) { |
29 | | - return (value < i.value) ? -1 : (value == i.value) ? 0 : 1; |
30 | | - } |
31 | | - public int compareTo(Object o) { |
32 | | - return compareTo((Integer)o); |
33 | | - } |
34 | | - } |
| 22 | +interface Comparable { |
| 23 | + public int compareTo(Object o); |
| 24 | +} |
| 25 | +class Integer implements Comparable { |
| 26 | + private final int value; |
| 27 | + public Integer(int value) { |
| 28 | + this.value = value; |
| 29 | + } |
| 30 | + public int compareTo(Integer i) { |
| 31 | + return (value < i.value) ? -1 : (value == i.value) ? 0 : 1; |
| 32 | + } |
| 33 | + public int compareTo(Object o) { |
| 34 | + return compareTo((Integer)o); |
| 35 | + } |
| 36 | +} |
35 | 37 | ``` |
36 | 38 |
|
37 | 39 | 例 `3-7`。 可比较整数的通用代码 |
38 | 40 |
|
39 | 41 | ```java |
40 | | - interface Comparable<T> { |
41 | | - public int compareTo(T o); |
42 | | - } |
43 | | - class Integer implements Comparable<Integer> { |
44 | | - private final int value; |
45 | | - public Integer(int value) { this.value = value; } |
46 | | - public int compareTo(Integer i) { |
47 | | - return (value < i.value) ? -1 : (value == i.value) ? 0 : 1; |
48 | | - } |
49 | | - } |
| 42 | +interface Comparable<T> { |
| 43 | + public int compareTo(T o); |
| 44 | +} |
| 45 | +class Integer implements Comparable<Integer> { |
| 46 | + private final int value; |
| 47 | + public Integer(int value) { |
| 48 | + this.value = value; |
| 49 | + } |
| 50 | + public int compareTo(Integer i) { |
| 51 | + return (value < i.value) ? -1 : (value == i.value) ? 0 : 1; |
| 52 | + } |
| 53 | +} |
50 | 54 | ``` |
51 | 55 |
|
52 | 56 | 如果您应用反射,您可以看到桥。 这里是代码,它使用 `toGenericString` 来打印方法的通用签名(参见 `7.5` 节),在 `Integer` 类中查找名称为 `compareTo` 的所有方法。 |
53 | 57 |
|
54 | 58 | ```java |
55 | | - for (Method m : Integer.class.getMethods()) |
56 | | - if (m.getName().equals("compareTo")) |
57 | | - System.out.println(m.toGenericString()); |
| 59 | +for (Method m : Integer.class.getMethods()) |
| 60 | + if (m.getName().equals("compareTo")) |
| 61 | + System.out.println(m.toGenericString()); |
58 | 62 | ``` |
59 | 63 |
|
60 | 64 | 在通用版本的 `Integer` 类上运行此代码会产生以下输出: |
61 | 65 |
|
62 | 66 | ```java |
63 | | - public int Integer.compareTo(Integer) |
64 | | - public bridge int Integer.compareTo(java.lang.Object) |
| 67 | +public int Integer.compareTo(Integer) |
| 68 | +public bridge int Integer.compareTo(java.lang.Object) |
65 | 69 | ``` |
66 | 70 |
|
67 | 71 | 这确实包含两种方法,一种是采用 `Integer` 类型参数的声明方法,另一种是采用 `Object` 类型参数的桥接方法。 (截至撰写本文时,`Sun JVM` 打印的是 |
|
0 commit comments