Correto ou NÃO

2 respostas
R

Olá sou novato em java e tenho uma dúvida o quanto ao estilo de programação, podemos dizer assim. tenho a seguinte situação:

public class Gerente {
	
	BlockingQueue<Integer> answerList;

	public Gerente(){

		this.answerList = new LinkedBlockingQueue<Integer>();
	}
}


public class Trabalhador {
	
	BlockingQueue<Integer> answerList;

	public Trabalhador(Gerente ger){

		this.answerList = ger.answerList();
	}

	public void run() {
		while (true) {
			int i = this.answerList.take();			
			...
		}
	}
}

Somente gostaria da opinião de você se é interessante utilizar a lista bloqueante dessa maneira ou se seria mais interessante na classe Gerente eu fazer uma chamada de metodo para a classe Trabalhador, algo do tipo:

public class Gerente {
	
	BlockingQueue<Integer> answerList;

	public Gerente(){

		this.answerList = new LinkedBlockingQueue<Integer>();
		Trabalhador t = new Trabalhador();
	}

	t.addList(1443);
}


public class Trabalhador {
	
	BlockingQueue<Integer> answerList;

	public Trabalhador(){

		this.answerList = new LinkedBlockingQueue<Integer>();
	}

	public void run() {
		while (true) {
			int i = this.answerList.take();			
			...
		}
	}

	public void addList(int i) {
		this.answerList.put(i);
}

Se alguem poder me auxiliar … AGRADEÇO

2 Respostas

A

Boa pergunta, alguém já usou BlockingQueue?

discorpio

Bom dia a todos.

Fazendo uma análise de lógica do seu código, o certo seria voce utilizar a herança, e inverter o conteúdo das classes, considerando que todo Gerente é um trabalhador, porém a recíproca não é verdadeira, ou seja, nem todo trabalhador é um gerente, neste caso a suas classes ficariam assim:

public class Trabalhador {  
      
         private BlockingQueue<Integer> answerList;  
  
         public BlockingQueue<Integer> getAnswerlist(){
              if (answerList == null) answerlist = new LinkedBlockingQueue<Integer>();
              return answerList;
         }

         public void setAnswerlist(LinkedBlockingQueue<Integer> answerList){
              this.answerList = answerList;
         }

    }

     // Aqui voce faz a herança
     public class Gerente extends Trabalhador {  
       
         public void run() {  
              while (true) {  
                  int i = getAnswerlist().take();          
                   ...  
              }  
         }  
      }

     // Agora voce só precisa instanciar a classe Gerente ou qualquer outra classe que herde de trabalhador desta forma

     public static void main(String args[]){

          Gerente ger = new Gerente();
          ger.getAnswerlist().put(1443);

Repare que quando encapsulei o atributo aswerlist utilizando o método getAnswerlist(), fazendo a instanciação dentro dele, voce não precisa ficar fazendo instanciação a toda hora deste atributo, e tudo ficou mais fácil quando se fez a herança (extends).

Criado 7 de fevereiro de 2011
Ultima resposta 8 de fev. de 2011
Respostas 2
Participantes 3