2012-10-11 19 views
9

Me pregunto si puedo tener una matriz (o básicamente una tabla) con cada elemento siendo un conjunto de objetos de diferentes tipos. Quiero decir que yo quiero crear algo como esto (sé que es incorrecto en la sintaxis, sólo quiero demostrar mi idea):¿Cómo almacenar objetos de diferentes tipos en un contenedor?

List<String, int, double, Date, ... , etc > list_name 

que estoy haciendo esto para asegurar que al guardar toda esta información a mi base de datos, i tendrá toda esta información en la misma entrada en la base de datos. Esto se debe a que hice algunos borradores web de diferentes sitios para reunir todos estos datos, es decir, en la lista, la cadena puede ser del sitio A, int puede ser del sitio B, etc. Encontré que se puede perder información por alguna razón (por ejemplo , para un elemento particular de la lista, puede faltar la cadena del sitio A, otros datos están ahí, perfectamente bien). Si guardo estos datos en listas separadas, me temo que habrá una falta de coincidencia de datos.

Ahora mi solución es crear una clase, digamos claseA:

ClassA{ 

public String info1 
public int info2 
public double info3 
.. 
.. 
public wtever info 

} 

y luego voy a tener una lista de claseA de

Me pregunto si hay una mejor manera de lograr esto ?

+0

no use genéricos Quiero decir que funciona bien con JDK 1.4 pero esta no es la solución recomendada ...: P – AurA

Respuesta

3

Estoy haciendo esto para garantizar que cuando guarde toda esta información en mi base de datos, tenga toda esta información en la misma entrada en la base de datos.

Sí, ha hecho lo correcto creando una clase para contener todos los valores.

Y, como ya se ha mencionado, puede crear un List de estos objetos si desea realizar varias inserciones/actualizaciones de bases de datos.

Muchos esquemas de persistencia operan en base a la definición de clases (conocidas como DAOs) para representar los datos almacenados en tablas individuales. Utilizar un proveedor de persistencia que admita clases de anotación (como Hibernate) realmente puede simplificar su interacción con una base de datos. Te recomendaría research this topic con más detalle.

1

Lo que podría hacer es crear una Superclase abstracta que extenderá todas sus clases, y luego hacer una lista de eso. Cualquier clase que amplíe esta súper clase se ajustará a la misma lista.

Solo asegúrate de averiguar qué tipo de Objeto estás tratando cuando manipules tu colección.

public abstract class ClassA { 
    // Empty 
} 

public class ClassB extends ClassA { 
    // something something 
} 

public class ClassC extends ClassA { 

} 

public class main { 
    List<ClassA> list..... 
} 
+0

¿No haría una 'Lista' de' Objetos' hacer lo mismo? – Daniel

+1

Sí, pero es posible que tenga problemas con el tipo de fundición. – OmniOwl

0

Dado que todos (una verdad con moderaciones) Objetos en Java heredar de Object, puede escribir List<Object>... y simplemente emitir los objetos en él cuando lo necesite. Tenga en cuenta que esto requiere que tenga un control absoluto sobre la clase de los diferentes objetos.

+0

una buena solución según mi opinión, pero una vez más se ha dicho con acierto que hay que ser extremadamente cuidadoso con el tipo de seguridad – AurA

+1

Si lees detenidamente la pregunta, no creo que sea una buena solución. –

1

Me gustaría hacer lo mismo, es decir, crear un objeto que representa el conjunto de cosas que desea guardar (¿tal vez hay un concepto de dominio oculto?) Y luego tener una lista de ese tipo.

1

Su forma de crear una clase para mantener estos diferentes tipos de propiedades parece buena. continuación, puede utilizar un ArrayList, una implementación de la interfaz List así:

ArrayList<ClassA> list = new ArrayList<ClassA>(); 

y luego se puede llenar y manipular fácilmente.

Para sus operaciones de bases de datos, que sugieren su uso DAO (acceso a objetos de datos) clases y asignador clases para facilitar sus operaciones de persistencia con el origen de datos.

2

Puede usar simple List<java.lang.Object> ya que todas las clases en Java son subclases de java.lang.Object. Sin embargo, esto es propenso a errores y puede lanzar ClassCastException en tiempo de ejecución si no lo está manejando con cuidado. Como ha mencionado, List<ClassA> sería correcto. Pero asegúrese de que todo esté bien con ClassA cuando lo diseñe.

+1

Esto es exactamente lo que estaba buscando. Utilice entonces "instanceof" para verificar de qué clase se creó este objeto y luego, eche el objeto al tipo correspondiente. – Chris623

Cuestiones relacionadas