Problem mit Double <-> double

  • Themenstarter Themenstarter Groxxda
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Groxxda

Gast
Guten Morgen alle zusammen,
ich beschäftige mich seit kurzem mit Java und jetzt ein Problem in der Umsetzung des MVC-Eventhandlings.
Und zwar sind in meinen Models die Datentypen steif vorgegeben (POJOs von Hibernate generiert), und zwar als Datentypen und nicht als Klasse.
Wenn ich jetzt allerdings die Daten mit Hilfe von Events übergebe, dann werden sie ja automatisch in Klassen konvertiert und die getMethod()-Funktion findet logischerweise keinen passenden Setter mehr am Model :/

Ich bin ja bestimmt nicht der erste der hieran hängt und deswegen würde ich mich freuen, wenn mir jemand helfen könnte, wie man das denn umgehen kann..

Wünsche allen auf jedenfall auch einen schönen Pfingstmontag 🙂

Mfg Groxxda
 
> und zwar als Datentypen und nicht als Klasse

? Beispiel ?

> Daten mit Hilfe von Events übergebe, dann werden sie ja automatisch in Klassen konvertiert

? Beispiel ?
 
Huhu, vielen Danke schonmal für deine Antwort.
Ich post jetzt hier einfach mal ein bisschen gekürzten Source, dann wird das vllt schneller klar 🙂
Model:
Code:
public class Model implements java.io.Serializeable {
	private String vorname;
	private double alter;

	public String getVorname() {
		return this.vorname;
	}
	public void setVorname(String vorname) {
		String oldVorname = this.vorname;
		this.vorname = vorname;

		firePropertyChange("Vorname", oldVorname, vorname);
	}

	public double getAlter() {
		return this.alter;
	}
	public void setAlter(double alter) {
		double oldGehalt = this.alter;
		this.alter= alter;

		firePropertyChange("Alter", oldAlter, alter);
	}
}
Controller:
Code:
public class Controller extends AbstractController {
	public void getModel() {
		setModelProperty("Vorname", "Max");
		setModelProperty("Alter",12.5);
	}
}
AbstractController:
Code:
public abstract class AbstractController implements PropertyChangeListener {
	private ArrayList<AbstractModel> registeredModels;

	protected void setModelProperty(String propertyName, Object newValue) {
		for (AbstractModel model : registeredModels) {
			try {
				Method method = model.getClass().getMethod(
						"set" + propertyName,
						new Class[] { newValue.getClass() }
				);
				method.invoke(model, newValue);
			} catch (Exception ex) {
					System.err.println("setModelProperty() :: "+ex.toString());
			}
		}
	}
}

Fehler:
Code:
setModelProperty() :: java.lang.NoSuchMethodException: [...]Model.setAlter(java.lang.Double)
Weil die Funktion setAlter ja eigentlich nen double und kein java.lang.Double erwartet.. (Das meinte ich mit Datentyp statt Klasse)
Als event wird hier garnichts übergeben, hab ich mich heut morgen vertan, sry 🙂
 
Schau dir mal das Apache BeanUtils Framework an, damit läßt sich auf BeanProperties sehr einfach zugreifen.

Ansonsten hilft wohl nur, in deinem AbstractController überladene Methoden für die primitiven Datentypen anzubieten, oder die Klasse mit reinzureichen.

Code:
protected void setModelProperty(String propertyName, Object newValue, Class valueClass) {
    for (AbstractModel model : registeredModels) {
         try {
            Method method = model.getClass().getMethod(
                  "set" + propertyName,
                  new Class[] { valueClass }
            );
            method.invoke(model, newValue);
         } catch (Exception ex) {
               System.err.println("setModelProperty() :: "+ex.toString());
         }
      }
   }
 
Vielen Dank kleiner_held,
das mit dem Übergeben der Klasse hab ich mir auch schon überlegt, da es wohl die einfachste Möglichkeit is - aber irgendwie widerstrebt mir das, weils mir irgendwie als nicht so sauber vorkommt....

Ich werd mir das von die angesprochene Framework mal genauer anschaun 🙂
Wenn jemand anderem noch eine andere Möglichkeit - vllt ohne externe Packages - einfällt, wäre nett, wenn derjenige diese hier postet...

MfG und nochmal danke, Groxxda
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben