阅读kvstore\ArrayWrappers.java(1)

用来包装数组对象,将数组对象包装成一个能够比较的东东。

class ArrayWrappers {

  public static Comparable<Object> forArray(Object a) {}

  private static class ComparableIntArray implements Comparable<ComparableIntArray> {}

  private static class ComparableLongArray implements Comparable<ComparableLongArray> {}

  private static class ComparableByteArray implements Comparable<ComparableByteArray> {}

  private static class ComparableObjectArray implements Comparable<ComparableObjectArray> {}

}

  看看测试代码怎么用的。

public class ArrayWrappersSuite {

  @Test
  public void testGenericArrayKey() {
   byte[] b1 = new byte[] { 0x01, 0x02, 0x03 };
   byte[] b2 = new byte[] { 0x01, 0x02 };
   int[] i1 = new int[] { 1, 2, 3 };
   int[] i2 = new int[] { 1, 2 };
   String[] s1 = new String[] { "1", "2", "3" };
   String[] s2 = new String[] { "1", "2" };

  // 这里主要使用 ArrayWrappers.forArray() 函数, 得到一个Comparable<Object>对象 得到的对象可以用来比较
  // 类型和值都一样才会比较成功
   assertEquals(ArrayWrappers.forArray(b1), ArrayWrappers.forArray(b1));
   assertNotEquals(ArrayWrappers.forArray(b1), ArrayWrappers.forArray(b2));
   assertNotEquals(ArrayWrappers.forArray(b1), ArrayWrappers.forArray(i1));  
// 虽然都是1,2,3 但是类型不一样 assertNotEquals(ArrayWrappers.forArray(b1), ArrayWrappers.forArray(s1)); assertEquals(ArrayWrappers.forArray(i1), ArrayWrappers.forArray(i1)); assertNotEquals(ArrayWrappers.forArray(i1), ArrayWrappers.forArray(i2)); assertNotEquals(ArrayWrappers.forArray(i1), ArrayWrappers.forArray(b1)); assertNotEquals(ArrayWrappers.forArray(i1), ArrayWrappers.forArray(s1)); assertEquals(ArrayWrappers.forArray(s1), ArrayWrappers.forArray(s1)); assertNotEquals(ArrayWrappers.forArray(s1), ArrayWrappers.forArray(s2)); assertNotEquals(ArrayWrappers.forArray(s1), ArrayWrappers.forArray(b1)); assertNotEquals(ArrayWrappers.forArray(s1), ArrayWrappers.forArray(i1)); assertEquals(0, ArrayWrappers.forArray(b1).compareTo(ArrayWrappers.forArray(b1))); assertTrue(ArrayWrappers.forArray(b1).compareTo(ArrayWrappers.forArray(b2)) > 0); //两个不同的数组比大小 {1,2,3} 比 {1,2}要大 assertEquals(0, ArrayWrappers.forArray(i1).compareTo(ArrayWrappers.forArray(i1))); assertTrue(ArrayWrappers.forArray(i1).compareTo(ArrayWrappers.forArray(i2)) > 0); assertEquals(0, ArrayWrappers.forArray(s1).compareTo(ArrayWrappers.forArray(s1))); assertTrue(ArrayWrappers.forArray(s1).compareTo(ArrayWrappers.forArray(s2)) > 0); } }

  assertEquals是怎么做比较的?

       所以 forArray返回的&nbsp;Comparable&lt;Object&gt; 这个对象肯定对 equals函数做了重构,这样数组返回的对象比较时候使用的是自己重构后的equals方法

posted @ 2019-09-17 14:30  瑶来瑶去  阅读(165)  评论(0)    收藏  举报