Hi, ich bin neu hier und bin mir nicht sicher ob ich hier richtig gepostet habe. Falls nicht einfach an die richtige Stelle verschieben. Ich hoffe ich kann mein Problem verständlich erklären und ihr habt eine Idee wie das zu lösen ist. Also ich versuche es mal. Hier die folgenden Konstrukte gibt es.
So das ist erst ein mal der Quellcode.
Falsche Sichbarkeiten sind zu vernachlässigen. Ich habe es nicht in der Form getestet !!!
Was ich möchte ist folgendes:
Ich möchte belibige "Daten"-Klassen erstellen, wie hier der "Human" zb., welche von CardData erben. Daraufhin möchte ich Attribute welche ich in meiner "Daten"-Klasse implementiere anmelden über die CardData.registerAttribute()-Methode. Das Problem ist dass ich ja nicht den AttributNamen registriere sondern den Inhalt des Attributes !?!?! Irgendwie müsste ich beides zusammen registrieren wie ich es mit der inneren Klasse Reg angedeutet habe. Der Sinn der ganzen Sache ist dass meine Superklasse, hier "CardData", über eine Änderung des Inhaltes des Attributes informiert wird. Darauf hin holen ich mir den neuen Inhalt das Attributes! Das Problem ist dass die Superklasse ja keine Ahnung hat was ich für Attribute in meiner Datenklasse habe. Ich brauch irgendwie eine direkte Beziehung zwischen AttributName und Attributinhalt. Ich könnte das wahrscheinlich kompliziert lösen aber ich möchte dass der jenige der von meiner Superklasse erbt so wenig wie möglich noch an Methoden zu implemtieren hat. Selbst bei dieser Implementierung muss ich bei der set-Methode "setHumanName()" die Änderung an die Superklasse melden. Und registrieren muss ich vorher auch noch. Das möchte ich aber schon nicht. Mir kommt es so vor als brächte ich sowas wie Referenzen auf eine Methode wobei das mein Problem glaub ich aber immer noch nicht löst.
Also noch mal zusammengefasst:
Es sollen Attribute einer Datenklasse registriert werden. Ich möchte bei einer Änderung des Inhaltes in der Superklasse darüber informiert werden und zugleich die inhaltliche Änderung bekommen. Das alles soll aber unter der Prämise erfolgen dass ich in der erbenden Klasse so wenig wie möglich explizit auf die Superklasse zugreife. Es soll dem Endbenutzer der meine Superklasse, vererbende nutzt, so einfach wie möglich gmacht werden.
Na mal sehen mich jemand verstanden und eine Idee hat. Ich bin auch noch unter dem folgenden Skypenick zu erreichen: UuugUuug
Alle anderen Kontaktdaten sind in meinem Profil.
Bitte helft mir. Und danke schon mal im Vorraus für eure Hilfe.
Code:
public abstract class CardData{
//Exemplarisch können hier 100 Attribute registriert werden.
//Ist eine einfache Implementierung
private Object[] registeredObjects=new Object[100];
private int attributeCounter=0;
//Klasse für die Registrierungsdaten
class Reg{
String attributeName="";
String attributeContent="";
Reg(String an,String ac){
attributeName=an;
attributeContent=ac;
}
}
//Konstruktor
protected CardData(){
}
/**
* Einen Attribut mit seinem Namen und Inhalt registrieren.
* Wobei ich den Namen aber nicht habe
*/
protected final void registerAttribute(String xxx,String attributeContent){
registeredObjects[attributeCounter]=new Reg(XXX,attributeContent); attributeCounter++;
}
protected final void attributeChanged(String xxx){
//neuen Inhalt holen und irgendwas damit machen.
}
}
public class Human extends CardData{
//Member
private String humanName;
//Konstruktor
public Human(String humanName){
setHumanName(humanName);
super.registerAttribute(???,humanName);
}
public void setHumanName(String humanName){
this.humanName=humanName;
super.attributeChanged();
}
public String getHumanName(){
return humanName;
}
}
So das ist erst ein mal der Quellcode.
Falsche Sichbarkeiten sind zu vernachlässigen. Ich habe es nicht in der Form getestet !!!
Was ich möchte ist folgendes:
Ich möchte belibige "Daten"-Klassen erstellen, wie hier der "Human" zb., welche von CardData erben. Daraufhin möchte ich Attribute welche ich in meiner "Daten"-Klasse implementiere anmelden über die CardData.registerAttribute()-Methode. Das Problem ist dass ich ja nicht den AttributNamen registriere sondern den Inhalt des Attributes !?!?! Irgendwie müsste ich beides zusammen registrieren wie ich es mit der inneren Klasse Reg angedeutet habe. Der Sinn der ganzen Sache ist dass meine Superklasse, hier "CardData", über eine Änderung des Inhaltes des Attributes informiert wird. Darauf hin holen ich mir den neuen Inhalt das Attributes! Das Problem ist dass die Superklasse ja keine Ahnung hat was ich für Attribute in meiner Datenklasse habe. Ich brauch irgendwie eine direkte Beziehung zwischen AttributName und Attributinhalt. Ich könnte das wahrscheinlich kompliziert lösen aber ich möchte dass der jenige der von meiner Superklasse erbt so wenig wie möglich noch an Methoden zu implemtieren hat. Selbst bei dieser Implementierung muss ich bei der set-Methode "setHumanName()" die Änderung an die Superklasse melden. Und registrieren muss ich vorher auch noch. Das möchte ich aber schon nicht. Mir kommt es so vor als brächte ich sowas wie Referenzen auf eine Methode wobei das mein Problem glaub ich aber immer noch nicht löst.
Also noch mal zusammengefasst:
Es sollen Attribute einer Datenklasse registriert werden. Ich möchte bei einer Änderung des Inhaltes in der Superklasse darüber informiert werden und zugleich die inhaltliche Änderung bekommen. Das alles soll aber unter der Prämise erfolgen dass ich in der erbenden Klasse so wenig wie möglich explizit auf die Superklasse zugreife. Es soll dem Endbenutzer der meine Superklasse, vererbende nutzt, so einfach wie möglich gmacht werden.
Na mal sehen mich jemand verstanden und eine Idee hat. Ich bin auch noch unter dem folgenden Skypenick zu erreichen: UuugUuug
Alle anderen Kontaktdaten sind in meinem Profil.
Bitte helft mir. Und danke schon mal im Vorraus für eure Hilfe.