Neues Objekt aus .CSV definition

Fohnbit

Top Contributor
Hallo!

Ich möchte ein neues Objekt aus einem gespeicherten CSV File erstellen.
Wenn ich die Klassen A,B,C habe und in einem CSV der Text B angegeben ist, soll:
CSV csv = New B();

Ich möchte jedoch nicht viele IF Abfragen einbauen sondern direkt die Information im CSV nutzen.
An anderen Stellen im Code muss daher vorher immer der Objekttyp abgefragt werden.

Alle Klassen haben die Superklasse CSV.

Danke
 
Wenn du direkt das Objekt aus der CSV lesen willst, dann wirds wohl Reflection sein müssen.
Ansonsten würde ich, wenn du schon eine CSV hast, einfach in der Datei eine ID speichern, die dir sagt, was für ein Objekt es sein muss. Du kannst da auch ziemlich auf Ifs verzichten, Switches tun es auch 😛

Ich habe hier mal ein Beispiel, dass dir erlaubt Objekte zu generieren, ohne das mit if-else Blöcken zu machen.

Java:
public class N
{
	private Map<String, Execution> doMap; 
	
	public N()
	{
		doMap = new HashMap<>();
		fillMap();
	}
	
	private void fillMap()
	{
		// Either add an explicit Object 
		doMap.put("1", new ObjectAExecution());
		
		// Or create an anonymous class
		doMap.put("1", new Execution()
		{
			@Override
			public Object createObjectFromData(Object someData)
			{
				Object o = new Object();
				// do something that creates your object
				return o;
			}
		});
	}
	
	// Returns an object based on the ID and whatever data you want.
	// it is a good idea to have an interface that you return
	// instead of a generic object.
	public Object createObjectFromID(String ID, Object someData)
	{
		Execution e = doMap.get(ID);
		
		if (e == null)
		{
			// Do default stuff or throw exception
			// e = new DefaultExecution();
		}
		
		return e.createObjectFromData(someData);
	}
	
	
	// Interface that lets you execute code
	private interface Execution
	{
		public Object createObjectFromData(Object someData);
	}
	
	// An example implementation of teh interface
	private class ObjectAExecution implements Execution
	{
		/* (non-Javadoc)
		 * @see de.nj.filetransfere.control.N.Execution#createObjectFromData(java.lang.Object)
		 */
		@Override
		public Object createObjectFromData(Object someData)
		{
			Object o = new Object();
			// do something that creates your object
			return o;
		}
	}
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben