2014-01-27 1 views
1

Кажется, что добавление закрытого ключевого слова в поля класса дает странное поведение. Следующий код прерывается, когда используется ключевое слово private, и в противном случае это не так. Может кто-нибудь, пожалуйста, подтвердите это?Ошибка в закрытых полях Groovy вызывает странное поведение?

@groovy.transform.EqualsAndHashCode 
class Cell{ 
    private int x; //adding private keyword to the fields causes test to give a false positive 
    private int y; //adding private keyword to the fields causes test to give a false positive 

    Cell(_x,_y){ 
     x = _x; 
     y = _y; 
    }  
} 

def liveCells = [] as Set 

Cell cell = new Cell(0,0); 
Cell diffCell = new Cell(1,1); 

liveCells.add(cell) 
assert liveCells.contains(cell) == true 
assert liveCells.contains(diffCell) == false //test fails due to private keyword to the fields. remove private keywords and the test passes. 

ответ

3

EqualsAndHashCode по умолчанию не будет включать в себя любые частные поля, так что вам нужно сказать, это сделать так:

@groovy.transform.EqualsAndHashCode(includeFields=true) 
+0

Спасибо !! :) Поскольку я новичок в groovy, могу я знать, где узнать больше об этих аннотации/Apis и их использовании? [Groovy document] (http://groovy.codehaus.org/gapi/groovy/transform/EqualsAndHashCode.html) ничего не упоминает (includeFields = true). Еще раз спасибо за вашу помощь. :) – user3240644

+0

Извините, он упоминает includeFields полностью в нижней части страницы. Но кажется, что все поля (независимо от того, являются ли они публичными или частными) по умолчанию не включены. Я понимаю, что неправильно? Или документ неверен? :П – user3240644

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