Duvida com um método usando For Each

2 respostas
rafael.luc

Ola, estou estudando um programa e me deparei com esse método:

@Override
	protected void doPoll(long time) {

		try {

			// no data
			if (getInSerialStream().available() == 0) {

				for (DataPointRT dataPoint : dataPoints) {
					ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator();
					if (!dataPointVO.getCommand().equals(null)) {
						getOutSerialStream().write(dataPointVO.getCommand().getBytes());
					}

				}
Esse codico funciona da seguinte forma, para cada Tag existe comando:

Tag 1 Command (envia o comando da Tag 1, recebe o valor e atualiza, fecha a porta).
Tag 2 Command (envia comando da Tag 2, recebe o valor e atualiza, fecha a porta),
.
.
.
E assim sucessivamente,

Porem no codico não consigo visualizar um índice que ordene o envio uma de cada vez, alguém entende o que foi feito?

A duvida maior seria nesta linha do codico:
ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator();
Dois objetos e dois metodos ????

2 Respostas

J

Olá!
Cara é o seguinte, o for each itera sobre uma coleção, no seu caso é uma coleção de DataPointRT, ou seja, ele percorre cada elemento da sua coleção de DataPointRT e atribui uma referência a cada iteração para o seu objeto dataPoint. Desta forma ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator(); agora é possível acessar propriedades do seu objeto dataPoint da classe DataPointRT.

rafael.luc

@j2tinho muito obrigado pela resposta, não conheço coleção vou procurar alguns exemplos para estudar, gostaria de saber se meu entendimento estaria correto abaixo:

Acredito que o DataPointRT deve ter um método que controle seu tamanho, vou explicar no codico abaixo.

Supondo que eu queira enviar o comando 5 da Tag 5

for (DataPointRT dataPoint : dataPoints) { //DataPointRT = 5 sendo o dataPoint o índice ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator(); //Itera ate o valor 5 if (!dataPointVO.getCommand().equals(null)) { getOutSerialStream().write(dataPointVO.getCommand().getBytes()); //Envia pela porta serial o getCommand() 5

Aqui seria onde atribui o valor lido na porta serial

if (getInSerialStream().available() > 0) { for (DataPointRT dataPoint : dataPoints) { ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator(); dataPoint.updatePointValue(new PointValueTime(value, timestamp)); // atualiza o value na posição 5

Estaria certo meu entendimento?

Ps :Coloquei apenas parte do codico já que duvida seria achar o indice.

Criado 2 de janeiro de 2012
Ultima resposta 2 de jan. de 2012
Respostas 2
Participantes 2