Duvidas sobre algumas implementações da API

0 respostas
L

Olá, não me perguntem porque eu fico vendo isso, mas as vezes acho umas coisas bizarras no código fonte das api’s.

a primeira é dentro da Classe java.awt.Color, tem um atributo private que não é usado na classe toda, qual a finalidade disso?! para que sera que iriam declarar isso!?

/**
     * Private data.
     */
    transient private long pData;

A segunda é relacionado ao famoso System.out.print(“hello World”);
O atributo out de System é public, final e estatico do tipo PrintStream, logo ele é iniciado na primeira vez que System aparece e seu valor não muda mais ok?!

A classe PrintStream tem um método chamado

public void print(Object obj) {

Perceba que não é estatico, logo só é acessivel através de uma instancia, que no caso do System.out.print é o atributo out de System. Mas olhando a declaração desse que vem a parte bizarra:

public final static PrintStream out = nullPrintStream();

Olhem o código do método nullPrintStream();

private static PrintStream nullPrintStream() throws NullPointerException {
	if (currentTimeMillis() > 0)
	    return null;
	throw new NullPointerException();
    }

Ele pode fazer duas coisas

  1. retornar null
  2. lançar um NullPointerException
    Para mim isso ai vai retornar null sempre… dessa forma, out vai ser null e se out for null, quando ele chamar o método não estatico print de PrintStream, não deveria lançar um NullPointerException?!

Não consigo debugar pq de certo out é iniciado junto com a jvm, ja que é estatico da classe System, mas fazendo uma analogia das chamadas, seria isso:

import java.io.PrintStream;

class System0
{
   public static final PrintStream out = nullPrintStream();

   private static PrintStream nullPrintStream() throws NullPointerException
   {
      if (System.currentTimeMillis() > 0) return null;
      throw new NullPointerException();
   }
}

public class Teste
{
   public static void main(String[] args)
   {
      System0.out.print("oi");
   }
}

que é claro da NullPointer…

afinal, alguem entende pq algumas coisas da API do java são assim?! tipo, não seguem a lógica da linguagem. Porque existir um atributo private nunca usado?! Como um atributo que é final e aparentemente sempre vai receber um valor null consegue chamar um método não estatico?!

enfim, é só por curiosidade, se alguém tiver alguma explicação, fala ai…

Criado 30 de março de 2007
Respostas 0
Participantes 1