2016-06-24 4 views
0

ich ein Problem in meinem Code haben: Ich habe einige Klassen, die eine Schnittstelle wie folgt implementiert:ein Objekt zu füllen, ohne die reale Art des Objekts zu wissen

public interface MyInterface{ 
puclic void myMethod{...} 
} 

public class Class1 implements MyInterface{ 
private int choice1; 
private String choice2; 
(Override of the other method define in interface) 
} 

public class Class2 implements MyInterface{ 
private String choice1; 
private int choice2; 
(Override of the other method define in interface) 
} 

in meinem Modell Diese Klassen sind, würde Ich mag um die Ansicht zu bitten, jeden der Parameter in diesen Klassen einzeln auszuwählen und die Auswahl der Ansichten eins zu eins im Modell zu speichern, aber ich muss meinen Controller verwenden, um die Eingabe zu verifizieren. Das Problem ist, dass ich in der Steuerung den Typ des Objekts nicht kenne, so kann ich nicht die spezifische Methode abrufen oder setzen. Außerdem kann ich es nicht in die Schnittstelle schreiben, weil ich verschiedene Parameter in Class1 und Class2 habe. Also ich weiß nicht, wie Sie die Auswahl im Modell speichern können.

+0

Sie können reflection verwenden, um die Namen der Felder sowie ihre Klassentypen zu erhalten. – ControlAltDel

+0

"Das Problem ist, dass in der Steuerung ich nicht den Typ des Objekts kenne, so kann ich nicht die spezifische Methode abrufen oder setzen." Warum sollte der Controller nicht eine "areYouValid" -Methode aufrufen? Weil jede Eingabe wissen sollte, was ihre gültigen Werte sind. – Fildor

Antwort

2

Setzen Sie die Sicherungslogik in Class1 und Class2. Lassen Sie sie ihre Werte speichern, oder lassen Sie sie zumindest eine Art von String, Liste usw. erzeugen, die die Ansicht speichern kann und unabhängig vom konkreten Objekt ist. Zusammenfassend schlage ich vor, eine Methode save() zu der Schnittstelle hinzuzufügen, die entweder den Zustand speichert oder den Zustand auf irgendeine speicherbare Weise zurückgibt.

+1

Das wäre besser als Kommentar – ControlAltDel

+0

Ich versuchte, die Frage zu beantworten, indem ich einen anderen Ansatz gab. –

+1

@ControlAltDel - ich stimme nicht zu. Das ist eine gute Antwort. Es gibt eine bessere Lösung für das Problem als Hacky-Zeug mit Reflektion. –

Verwandte Themen