[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

RE: Mais ainda sobre os statics da vida...



Daniel Cukier writes:

 > Eu tenho a minha classe hash que seria assim:
 > 
 > class hash{
         ^
         Hash

Uma observação paralela: É convencional usar nomes de classes começando
com maiúscula e nomes de instâncias começando com minúsculas. Embora a
linguagem não obrigue, vale a pena seguir essa convenção!

 >     
 >     Page[] vetor;
 >     int hashSize;
 >     Page tempPage;
 >     Page antPage;
 > 
 >     hash(int tamanho){
 > 	hashSize = tamanho;
 > 	vetor  = new Page[tamanho];
 >     }
 >     
 >     Page getPage(long pageId){ 
 > 	tempPage = vetor[(int)pageId % hashSize];
 > 	while ((tempPage!=null) & (tempPage.id != pageId)){
 > 	    tempPage = tempPage.next;
 > 	}
 > 	return tempPage;
 >     }
 > .
 > .
 > .
 > }
 > 
 > Agora o problema:
 > eu tenho na classe buffer manager isso:
 > 
 > 	Page hashpos = new Page();
 > 	hashpos = hash.getPage(pageId);
 > 
 > 
 > porque ao compilar o java me dá a mensagem:
 > 
 > Can't make static reference to method br.usp.ime.jbase.Page
 > getPage(long) in class br.usp.ime.jbase.hash.
 > 	hashpos = hash.getPage(pageId);

Porque getPage é um método de instância (não é static) definido na sua
classe hash. Voce só pode chamá-lo sobre uma instância da classe, não
sobre a classe:

 	hashpos = hash.getPage(pageId); // errado, hash é classe


        hash h = new hash(...);       // h se refere a uma instância da classe
	...
       	hashpos = h.getPage(pageId);  // correto!

É muito mais fácil evitar este tipo de confusão se voce sempre escolher
nomes de classes comecando com maiúscula e nomes de instâncias começando
com minúscula. Siga esta convenção!

Reverbel