Какой из классов расширения является этим объектом? - PullRequest
0 голосов
/ 23 мая 2011

Предполагается, что у меня есть массив User объектов, где каждый объект на самом деле является одним из двух классов, расширяющих User. ComputerUser и HumanUser оба расширяются User.

Предположим, я перебираю список, и каждый объект называется o, когда я его использую.

Можно ли выяснить, является ли o ComputerUser или HumanUser, просто сравнив это так:

if(o.getClass().equals(ComputerUser.class)) {}
else if(o.getClass().equals(HumanUser.class)) {}

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

Вы можете использовать оператор instanceof:

if (o instanceof ComputerUser) { 
    ...
}

хотя это считается плохим использованием объектно-ориентированного программирования. Альтернативой является использование полиморфизма и определение поведения, соответствующего ComputerUser по сравнению с HumanUser, как таковое:

abstract class User {

   abstract public void work();

}

class ComputerUser extends User { 

    @Override
    public void work() { 
       ...
       //specific to ComputerUser
    }

}

class HumanUser extends User { 

    @Override
    public void work() { 
       ...
       //specific to HumanUser
    }

}
2 голосов
/ 23 мая 2011
if (o instanceof ComputerUser)

и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...