evil.hunter:
Adolfo infelizmente ainda não aprendi reflexão ainda. Rmarin eu vi o que estava fazendo errado, eu tinha feito código idêntico ao que você fez só que não tinha colocado o this. Por isso não estava dando certo. Alias muito obrigado a todos pelas respostas...
public int contaPortasAbertas () {
int contPortasAbertas = 0;
if (this.p1.estaAberta())
contPortasAbertas++;
if (this.p2.estaAberta())
contPortasAbertas++;
if (this.p3.estaAberta())
contPortasAbertas++;
return contPortasAbertas;
}
Cara, a minha sugestão foi exatamente para você não usar isso. Imagine, toda vez que uma casa ganhar uma nova porta você terá que colocar um novo if nesse código, isso não é legal.
Usar reflection na camada de negócios para capturar o tipo dos atributos, perguntar se é uma porta e aí sim verificar se ela está aberta, é uma solução. Porém não acho que seja a melhor saída. Reflection deve ser utilizada somente em casos em que haja realmente necessidade, ou seja, dificilmente você usa reflection na camada de negócios. Geralmente em classes de infra-estrutura, ou coisas do gênero.
Agora com relação a solução do varargs, também é uma saída, entretanto, caso a casa ganhe novas portas, além de termos que inserir novos atributos Porta a classe, teremos que colocar um novo argumento para o método contaPortasAbertas (Porta portas...).
--
Uma casa tem N portas, a não ser que seja uma casa específica, ou seja, CasaDaTiaAvóDoMarquinhos, fora isso, a melhor solução é trabalhar com uma lista. Daí você pode ter o addPorta(Porta porta), e aí sim sua casa vai poder ter quantas portas você quiser, e poderá ser a CasaDaTiaAvóDoMarquinos, CasaDoPaiDoZezão, CasaDosInferno... :lol: