[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...
- Subject: RE: Mais ainda sobre os statics da vida...
- From: Francisco Reverbel <reverbel at ime.usp.br>
- Date: Mon, 26 Apr 1999 15:17:40 -0300
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