Java duvida

luismauricio

Power Member
O seguinte codigo me dá erro, alguem me pode dizer qual o problema:

public List<Fornecedor> lista = new List<Fornecedor>();

onde Fornecedor é um objecto.
 
Última edição:
É um atributo? E se é um atributo, nao faz sentido ser publico, convém que seja privado ou protected, a não ser que queiras divulgar ao cliente esse atributo.
Melhor maneira de fazer isso:

PHP:
import java.util.List;
import java.util.ArrayList;

public class MyClass {
    private List<Fornecedor> lista;

    //No construtor da classe
    public MyClass () {
         lista = new ArrayList<Fornecedor> ();
    }
}

Porquê ArrayList e não List? Simples, em java(se List for a interface que estou a pensar), não podes criar instâncias de interfaces, ou seja à esquerda do sinal de igual pode estar uma Interface que define o tipo da variável, à esquerda tem que estar uma classe, mais exemplos:
Código:
Map-> Interface
HashMap ou TreeMap -> Classes;

List-> Interface
LinkedList, ArrayList, ArrayBlockingQueue -> Classes;

Queue-> Interface
LinkedList, ArrayBlockingQueue -> Classes;

Tree-> Interface
BinaryTree, SearchBinaryTree -> Classes;

Um exemplo real:
Queue<Integer> filaDeCarros = new ArrayBlockingQueue<Integer> (10);

Percebeste a ideia??
Mais exemplos na API do java, ou Aqui
 
Última edição:
Eu fiz o que disseste MadOnion mas não deu. Não percebo o que se passa. Tenho um Objecto

public Fornecedor(String nome, String morada, String email, int telefone , int fax){}

depois queria criar uma pilha ou fila ou lista para adicionar e remover Fornecedores para depois gravar em ficheiro, que me recomendam.​

 
Sim, é preciso ter o Java5 configurado no eclipse.
De certeza que tens o import das classes e interfaces bem feitas?
Experimenta então, ArrayList<Fornecedor> lista = new ArrayList<Fornecedor>(); ou então java.util.ArrayList<Fornecedor> lista = new java.util.ArrayList<Fornecedor>();

Secalhar pode ser um erro do eclipse, experimenta compilar pela consola(linha de comandos).
 
Em resposta ao teu pedido de ajuda, decidi programar um bocadito, e cheguei a qualquer coisa como isto:

Código:
public class Fornecedor {
    
    public String nome;
    public String morada;
    public String email;
    public int fax;
    public int telefone;
    /** Creates a new instance of Fornecedor */
    public Fornecedor(String nome, String morada, String email, int fax, int telefone) {
        
        this.nome=nome;
        this.morada=morada;
        this.email=email;
        this.fax=fax;
        this.telefone=telefone;
    }
    
    
    
    
}

Código:
public class Gestao {
    
    private ArrayList<Fornecedor> lista;
    
    /** Creates a new instance of Gestao */
    public Gestao() {
        
        lista = new ArrayList();
        
    }
    
    public void add(Fornecedor f) {
        
        lista.add(f);
    }
    
    public void delete(Fornecedor f) {
        
        int i;
        
        for(i=0; i<lista.size(); i++)
        {
            if(lista.get(i).nome==f.nome)
            {
                lista.remove(i);
            }
        }
    }
    
    public void print() {
        
        int j;
        
        for(j=0; j<lista.size(); j++)
        {
            System.out.println(lista.get(j).nome + " ");
        }
    }
    
    
    
}

Para testar:

Código:
public static void main(String[] args) {
        // TODO code application logic here
        
        Fornecedor f1 = new Fornecedor("CTT","Porto","none",254,87);
        
        Fornecedor f2 = new Fornecedor("BTT","Chaves","none",254,87);
        
        Fornecedor f3 = new Fornecedor("BMX","Lisboa","none",254,87);
        
        Gestao g = new Gestao();
        
        g.add(f1);
        
        g.add(f2);
        
        g.add(f3);
        
        g.print();
        
        g.delete(f2);
        
        g.print();
    }
 
Não será mais fácil guardares num ficheiro os fornecedores e depois lê-los a partir do ficheiro e ao mesmo tempo que os lês, vais gravando na ArrayList?
 
Consegues gravar/carregar objectos no disco por serialização.
Não é complicado mas o código pode ser extenso de maneira que te deixo um bom link para aprenderes como é que funciona: http://java.sun.com/developer/technicalArticles/Programming/serialization/

A unica solução que conheço para passar o estado do objecto num ficheiro para uma estrutura de dados, é a tua classe implementado a interface Serializable.
O resto está no link supra-citado.

Por outro lado, se tiveres um ficheiro com do tipo:

fornecedores.txt
Código:
Jose Lisboa [email protected] 9564846 212486
Miguel Almada [email protected] 9564846 212486
Antonio Melgaço [email protected] 9564846 212486
Francisco Funchal [email protected] 9564846 212486

Podes usar um Scanner ou algum outro fluxo de leitura de dados do disco, tipo BufferedReader.

PHP:
ArrayList<Fornecedores> lista = new ArrayList<Fornecedores> ();
Scanner f_in = new Scanner(new FileReader("fornecedores.txt")); //se receberes da linha de comandos, mete args[0]

while( f_in.hasNext() ); //Enquanto existirem dados no ficheiro
       lista.add( new Fornecedor(f_in.next(), f_in.next(), f_in.next(), f_in.nextInt(), f_in.nextInt() );

f_in.close();

É uma alternativa.
 
Última edição:
uma boa alternativa, como alguém já disse, seria usar um ObjectOutputStream e um ObjectInputStream que basicamente escrevias para um qualquer output stream de um ficheiro o estado actual do(s) objectos que quizesses.

Mini-exemplo:

escrever:

Código:
FileOutputStreamfos= newFileOutputStream(“foo.out”);
ObjectOutputStreamoos=newObjectOutputStream(fos);
oos.writeInt(12345);
oos.writeObject(“Hoje”);
oos.writeObject(newDate());
oos.close();
fos.close();

ler:

Código:
FileInputStreamfis= newFileInputStream(“foo.out”);
ObjectInputStreamois= newObjectInputStream(fis);
inti = ois.readInt();
Stringhoje = (String) ois.readObject();
Date data = (Data) ois.readObject();
ois.close();
fis.close();

espero k ajude! :)
 
Back
Topo