Lista ligada armazenando um objecto usando cast

3 respostas
sod

Boas pessoal, sou novo no forum e em java. O meu problema é o seguinte:

Tenho 3 tipos de objectos, car, van e camper, preciso de guardar um desses 3 objectos numa lista ligada.
Até aqui não há problema mas acho que seria um desperdicio de memoria guardar os 3 tipos de objectos numa lista se a inserção so permite um de cada vez.

public class TypeVehicle {

    Car car;
    Van van;
    Camper camper;
    private NodeList next;

    ....
}

É possível fazer algo tipo isto:

public class TypeVehicle {

    ObjGlobal vehicle;
    private NodeList next;

    ....
}

Quando inserir um objecto faço um cast do tipo de objecto a armezar e pronto.
Alguma solução?

3 Respostas

B

Essa “lista ligada” à qual tu se refere parece ser linked list não? Indiferentemente, tu parece não ter entendido ou estudado o conceito de polimorfismo.

Essa sua TypeVehicle deveria ser uma classe abstrata (ao meu entender) e as classes car, van e camper classes concretas que herdam da TypeVehicle.

Feito isso você teria uma “lista ligada” que guardaria objetos TypeVehicle (que por tabela aceitaria objetos do tipo car, van, camper e qualquer outro que estenda a classe abstrata TypeVehicle).

Car car = new Car();
Van van = new Van();
Camper camper = new Camper();

LinkedList<TypeVehicle> lista = new LinkedList<TypeVehicle>();
lista.add(car);
lista.add(van);
lista.add(camper);

Detalhe, ao recuperar um objeto da lista no código acima, ele vai retonar um do tipo TypeVehicle. Para conseguir descobrir se o objeto é do tipo car, van ou camper use o comando instanceof, e depoist faça um cast:

sod

Em primeiro lugar estou contente por existir um objecto do tipo LinkedList, lindo!!
Sim é uma lista ligada. Segundo o quer percebi tu sugeres que tenha uma classe a cima das classes car, van e camper do tipo abstract com extends, certo?

public abstract class TypeVehicle extends car, van, camper {}

Assim posso chamar os metodos das minhas classes filhas dentro da class TypeVehicle, certo?

E obrigado pela dica da LinkedList e da recuperação de dados.

sod

Agora fiquei confuso.

O que tenho é o seguinte:

Class vehicle que define as propriedades e métodos do veículo.
Tenho 3 classes, car, van e camper que herdam a classe vehicle e tem métodos e propriedades distintos para além dos definidos em vehicle.

public class Vehicle {
   //métodos e propriedades
    ....
}

public class Car extends Vehicle {
    //Métodos e propriedades pertencentes somente a class Car
    //No entanto herda as propriedades e métodos da class Vehicle
    ....
}

public class Van extends Vehicle {
    //Métodos e propriedades pertencentes somente a class Van
    //No entanto herda as propriedades e métodos da class Vehicle
    ....
}

public class Camper extends Vehicle {
    //Métodos e propriedades pertencentes somente a class Camper
    //No entanto herda as propriedades e métodos da class Vehicle
    ....
}

public class Branch { //Talvez fique melhor com este nome
    Car car = new Car ();
    Van van = new Van ();
    Camper camper = new Camper ();
    //Aqui vou chamar os métodos das classes Car, Van e Camper
    //inserir Carro
    //Carro.setModel = ....
    //Van.setRegistration = ...

   //E claro guardar tudo numa LinkedList
   //Posso ter um numero indeterminado de objectos do tipo Car, Van e Camper
}

//Depois vou ter outra classe chamada Interprise que vai ter um número indeterminado de objectos do tipo Branch.

public class Enterprise {
    Branch b = new Branch();
    //LinkedList...
}

Não sei se é a forma correcta de fazer, solução?
Obrigado

Criado 28 de maio de 2011
Ultima resposta 29 de mai. de 2011
Respostas 3
Participantes 2