JPA-сущности и метод equals для абстрактной сущности - PullRequest
0 голосов
/ 20 октября 2011

У меня есть абстрактный класс сущностей, который реализуют 3 несколько разных сущности.В моих 3 подклассах я переопределил equals и имеет методы, но вопрос в том, должен ли я сделать это также в абстрактной сущности?Если я этого не сделаю, я не смогу сравнивать сущности, которые определены только абстрактными сущностями, если я не приведу их.Если я сделаю равное, рискну ли я сравнить с различными дочерними объектами и понять, что они похожи?

Пример:

abstract class Log{}
SystemLog extends Log{}
UserLog extends Log{}

    public void test(Log log){
        Log myInner = new SystemLog();
        if(log.equals(myInner)){
            //do random stuff
        }
    }

1 Ответ

1 голос
/ 20 октября 2011

Я не вижу проблемы с кастингом. Тип аргумента, равный равному, - Object, поэтому вам все равно необходимо привести в действие, чтобы получить доступ к атрибутам.

Если вы определяете метод equals в каждом подклассе, когда возникает ситуация, когда equals в абстрактном суперклассе вызывается?

Если я сделаю равное, я рискну сравнить с различными дочерними организациями и получить, что они похожи

В любом случае, вы рискуете сравнить разные субстанции друг с другом. Представьте, что Set с суперклассом является типом, заполненным объектами, которые являются двумя экземплярами двух разных подклассов. Это не слишком связано с тем, переопределяете ли вы «равно» в суперклассе или нет.

В вашем примере метод equals, возможно реализованный в абстрактном классе, Log не будет вызываться, если у нас уже есть реализация в фактическом подклассе:

Предполагая, что:

UserLog extends Log{
    public boolean equals(Object o) {
        //I do override equals method so I am one who is called.
        //and here you go and check type with something like
    if (this == o) return true;
    if (!(o instanceof UserLog)) return false;//accepts subclasses of UserLog
     ....
    }
  ...
}

//And then somewhere else
  Log ul = new UserLog();
  test(ul);
...