2016-08-26 6 views
1

Я работаю с двумя List и пытаюсь использовать contains(). Я не нарушаю конвенцию, но все же получаю ложную информацию об использовании моего класса для contains.Java Утвердить те же значения, но Erroring

Items.class

class Items implements Comparable<Items> { 
    private String name; 
    private Date date; 
    private Lib.CLASSENUM type; 

    public getDate(); 
    public setDate(); 

    .... 
    public compareTo(Items o) { 
    ... 
    } 
    } 

Test.class

List<Items> actualList; 
List<Items> expectedList; 

public setup() { 
    actualList = new ArrayList<>(); 
    expectedList = new ArrayList<>(); 
} 

class Tests { 
@Test 
public void statusCheckValidatingRedLinePromotionItemsTest() { 
    //this just sets the two ArrayList to clear 
    clearProductMaps(); 
    Items goodsItem = new Items(); 

    goodsItem.setName("Product_A"); 
    goodsItem.setPrice(4.10); 
    goodsItem.setStatus(Lib.CLASSENUM.ORIGINAL); 
    goodsItem.setDate(date); 

    actualList.add(goodsItem); 
    goodsItem = new Items(); 
    goodsItem.settName("Product_A"); 
    goodsItem.setPrice(3.70); 
    goodsItem.setStatus(Lib.CLASSENUM.PROMO); 
    date = calendar.getTime(); 
    goodsItem.setDate(date); 

    actualList.add(goodsItem); 
    goodsItem = new Items(); 
    goodsItem.setName("Product_A"); 
    goodsItem.setPrice(3.70); 
    goodsItem.setDate(date); 
    goodsItem.setStatus(Lib.CLASSENUM.PROMO); 
    expectedList.add(goodsItem); 

    assertTrue(expectedGoods.get(0).contains(actualList.get(0)); 
} 

содержит должно быть правдой, не так ли? (? О == NULL е == NULL: o.equals (е))

ответ

1

Вы не получаете предмет соответствия, поскольку contains(..) метод ArrayList основывается на равенстве проверки, а не на Compararble<T> реализации.

Как только вы переопределяете и применяете equals(..) и hashCode() в классе Item, испытания пройдут.

В качестве альтернативы вы можете использовать TreeSet<T>, который полагается на Compararble<T>, вместо ArrayList<T>, чтобы проверить сдерживание.

0

Одна вещь с места в карьер, которую я замечаю, это то, что вы ошибочно написали Сопоставимый. Сопоставимый как интерфейс имеет дело с пользовательской сортировкой, а не с проверкой равенства, как отметил dasblinkenlight.

+0

только в соответствии со сроками, поэтому он не был ошибкой выполнения или компилятора с надписью выше, когда он был опубликован. –

Смежные вопросы