Duvida com relação à Instancia [Resolvido]

2 respostas
matheuslmota

E ae galera blza?
O que faz esse trecho de código:

List projectsList = new List(parent, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);

Em que essa List eh uma List visual do eclipse, usada para criar plugins para o eclipse, nao uma List convencional.
A duvida é, essa instancia recebe 2 argumentos e para o segundo argumento foi passado um teste lógico “OU”. Qual seria a função desse teste? O segundo arqumento que o construtor deve receber é um inteiro. Então ele faz o que com esse teste? Qual o valor que de fato será passado para o segundo argumento? Confesso que nuca havia deparado com esse tipo de declaração.
Agradeço desde já
Abraços

2 Respostas

ViniGodoy

Esse não é um ou. É um bitwise ou. Leia aqui:
http://www.guj.com.br/posts/list/131363.java#707556

Considere que SWT_BORDER tem o valor 1 (em binário 001).
Considere que SWT_SINGLE tem o valor 2 (em binário 010).
Considere que SWT.V_SCROLL tem o valor 3 (em binário 100).

O que esse ou bitwise faz é combinar os valores. Um parâmetro como:
SWT_BORDER | SWT.V_SCROLL

Irá se transformar em:
001

100

101

Assim, você acaba passando 3 booleans em uma única variável int. Esse tipo de coisa é muito usada em protocolos e em antigas aplicações C.

Para testar se os valores foram mesmo setados, o list usa o operador &:

if (parametros & SWT_BORDER == SWT_BORDER) { //Então aqui o bit do SWT_BORDER está ligado. Desenha a borda }

Se puder, prefira variáveis boolean. Esse tipo de prática poupa alguns bits, mas é mais lenta e também mais insegura. Só use essa técnica se realmente for muito importante poupar bytes, como é o caso de protocolo de redes, ou aproveitar memória em algum tipo de hardware limitado.

matheuslmota

Muito obrigado ViniGodoy, muito esclarecedor seu post, tirou minha duvida. :wink:

Criado 5 de agosto de 2010
Ultima resposta 5 de ago. de 2010
Respostas 2
Participantes 2