Felder von aufrufender Klasse ändern

faked

Mitglied
Hallo,

ich habe folgendes Problem:

ich habe 3 Klassen A,B u. C.
Java:
class A 
{ 
    ... 
    String IPAdress =""; 
    String PORT = ""; 
    String clientID = ""; 
 
    C myC = new C(); 
 
    myC.getSettings(); 
 
} 
 
class B 
{ 
    ... 
    String IPAdress =""; 
    String PORT = ""; 
    String clientID = ""; 
 
    C myC = new C(); 
 
   myC.getSettings(); 
 
} 
 
class C 
{ 
...
    public void getSettings() 
    { 
        String IPAdress = "127.0.0.1"; 
        String PORT = "10"; 
        String clientID = "44"; 
//      aufrufendeKlasse.IPAdress = IPAdress;
    } 
}

In Klasse C gibt es eine Methode die die Werte dreier Felder bestimmt.
Diese Methode aus Klasse C kann nun von Klasse A oder B aufgerufen werden.
Wie bekomme ich das nun hin daß ich die Felder der aufrufenden Klasse in der Methode getSettings ändern kann?
Vielen Dank.
 

jgh

Top Contributor
1. Bitte gewöhn dir gleich an: Variablen grundsätzlich klein!!!! (Konstanten u.a mal ausgenommen),

2. Und "sprechende" Namen sind meist von Vorteil ;)

3. Warum gibt es eine Klasse B, die genauso aussieht wie die Klasse A? Damit sowas nicht vorkommt, gibt es OO!

Ansonsten kannst du das dein Problem folgendermaßen lösen:
Java:
class A 
{ 
    ... 
    String IPAdress =""; 
    String PORT = ""; 
    String clientID = ""; 
 
    C myC = new C(); 
 // hiermit übergibst du der Methode getSettings(this) eine Referenz auf das Objekt der Klasse A
    myC.getSettings(this); 
 
} 
 
class B 
{ 
    ... 
    String IPAdress =""; 
    String PORT = ""; 
    String clientID = ""; 
 
    C myC = new C(); 
 
   myC.getSettings(); 
 
} 
 
class C 
{ 
...
    public void getSettings(A a) 
    { 
// normalerweise sollte man dafür "getter-Methoden" benutzen!
        a.IPAdress = "127.0.0.1"; 
        a.PORT = "10"; 
        a.clientID = "44"; 
//      aufrufendeKlasse.IPAdress = IPAdress;
    } 
}
 

faked

Mitglied
Ich hab das nun mal ausprobiert, aber vielleicht ist es heute noch zu früh für mich:
(hab mal die Klasse B weggelassen):
Java:
class A
{
    public A()
    {
        String IPAdress ="";
        String PORT = "";
        String clientID = "";

        C myC = new C();
        myC.getSettings(this);
    }                                                                                                                                                                                                     

    public static void main(String[] args)
    {
        A myA = new A();
    }
}


class C
{
    public void getSettings(A a)
    {
        a.IPAdress = "127.0.0.1";                                                                                                                                                                         
        a.PORT = "10";
        a.clientID = "44";
    }
}

wenn ich den Compiler anwerfe bringt dieser folgende Fehlermeldungen:
javac A.java

./C.java:5: cannot find symbol
symbol : variable IPAdress
location: class A
a.IPAdress = "127.0.0.1";
^
./C.java:6: cannot find symbol
symbol : variable PORT
location: class A
a.PORT = "10";
^
./C.java:7: cannot find symbol
symbol : variable clientID
location: class A
a.clientID = "44";
^
3 errors
 

jgh

Top Contributor
die Felder müssen natürlich in der Klasse und außerhalb des Konstruktors deklariert/initialisiert sein.

Java:
class A {
	String IPAdress = "";
	String PORT = "";
	String clientID = "";
        public A(){
 

jgh

Top Contributor
post_thanks.gif
. doClick();
 

L-ectron-X

Gesperrter Benutzer
Wobei man sagen muss, dass der direkte Zugriff von außen auf Variablen nicht üblich ist. Instanzvariablen sollten von außen nicht sichtbar sein.
Im Allgemeinen werden dafür get()- und set()-Methoden in die Klasse eingefügt, die die Attribute der Klasse manipulieren.
 

faked

Mitglied
Füge ich nun allerdings die Klasse B hinzu, dann funktionierts nicht mehr wie gewünscht:

Java:
class A
{
    String IPAdress ="";
    String PORT = "";
    String clientID = "";

    public A()
    {                                                                                                                                                                                                     
        C myC = new C();
        myC.getSettings(this);
    }

    public static void main(String[] args)
    {
        A myA = new A();
    }
}


class B                                                                                                                                                                                                   
{
    String IPAdress ="";
    String PORT = "";
    String clientID = "";

    public B()
    {
        C myC = new C();
        myC.getSettings(this);
    }

    public static void main(String[] args)
    {
        B myB = new B();
    }
}


class C
{
                                                                                                                                                                                                          
    public void getSettings(A a)
    {
        a.IPAdress = "127.0.0.1";
        a.PORT = "10";
        a.clientID = "44";
    }
}

javac B.java
B.java:10: getSettings(A) in C cannot be applied to (B)
myC.getSettings(this);

Ich hab natürlich vergessen zu sagen daß sowohl die Klasse A u. die Klasse B eine main-Methode enthalten.
Außerdem ist es sicher besser wie Ihr schon oben beschrieben habt getter und setter einzusetzen.
Trotzdem würde mich interessieren ob das lösbar ist.
Vielen Dank.
 

jgh

Top Contributor
Deine Klasse C kann entweder auch noch folgende Methode implementieren
Java:
   public void getSettings(B b)
    {
        b.IPAdress = "127.0.0.1";
        b.PORT = "10";
        b.clientID = "44";
    }

aber einfacher wäre dann, dass die beiden Klassen(A und B) in irgendeiner "Beziehung" stehen. Ob nun über ein Interface, was beide Klassen implementieren, oder über Vererbung, oder oder oder

Aber da sind wir dann bei Design-Entscheidungen und da solltest du dir halt überlegen, was macht am meisten Sinn.
 
S

SlaterB

Gast
interessant zu erwähnen: bei einem gemeinsamen Interface wäre der direkte Zugriff auf Attribute gar nicht mehr möglich,
spätestens dann ist man gezwungen set-Methoden zu verwenden oder auch etwas kompakter:
public void update(String ip, String nochetwas, ..)
 

faked

Mitglied
Mit interfaces kann ich noch nicht umgehen (bin mit meinen Grundlagen noch nicht soweit).
Werd fuers erste mal set-Methoden verwenden.
Vielen dank nochmals fuer die rasche Unterstuetzung.
 
T

Tomate_Salat

Gast
Das klingt für mich aber nach: ich habe iwo eine Configuration definiert und will die in notwendigen Klassen verfügbar machen. Dann würde man aber entweder eine Referenz auf die Config mitgeben.
Ich würde es aber wiederum anderster machen: Für soetwas könnte man guice nutzen. Hier ein kleines tutorial von thE_29
 
Zuletzt bearbeitet von einem Moderator:
T

Tomate_Salat

Gast
Also, dann ist das was du machst ein designfehler. Eine Updatemöglichkeit ist ziemlich aufwendig und fehleranfällig. Normalerweise hält eine Klasse die daten (Model) und wenn eine Klasse solche Informationen braucht, gibst du dieser Klasse eine referenz auf das Model. Wenn sich iwas an der Datenstruktur ändert, brauchst du nur das Model zu aktuallisieren und alle anderen Klassen bekommen dann nur noch die aktuellen Daten:

Java:
class Config
{
    private String ip;
    
    public Config()
    {
        ip    = "127.0.0.1";
    }

    public void setIP(String ip)
    {
        this.ip    = ip;
    }
    
    public String getIP() 
    {
        return ip;
    }
}

public class Client
{
    public static void main(String[] args)
    {
        Config conf    = new Config();
        
        Client user1= new Client(conf);
        Client user2= new Client(conf);
        
        System.out.println("IP1: " + user1.getIP());
        System.out.println("IP2: " + user2.getIP());
        conf.setIP("192.15.12.2");
        System.out.println("IP1: " + user1.getIP());
        System.out.println("IP2: " + user2.getIP());
    }
    
    private Config c;
    
    public Client(Config c)
    {
        this.c    = c;
    }
    
    public String getIP() 
    {
        return c.getIP();
    }
}

Ausgabe:
Code:
IP1: 127.0.0.1
IP2: 127.0.0.1
IP1: 192.15.12.2
IP2: 192.15.12.2
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
U HILFE! - per ActionListener Felder enablen....... Java Basics - Anfänger-Themen 5
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
A Felder: arithmetisches und geometrisches Mittel Java Basics - Anfänger-Themen 3
L Datentypen Deklarierte Felder einer Generic Klasse bestimmen Java Basics - Anfänger-Themen 7
Elyt Bei Monopoly werden Felder übersprungen Java Basics - Anfänger-Themen 2
L Listen und Felder Java Basics - Anfänger-Themen 2
neerual Int-Felder erzeugen Java Basics - Anfänger-Themen 16
P Felder König array Java Basics - Anfänger-Themen 6
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
D Felder Java Basics - Anfänger-Themen 2
D Übung Felder java Error kompilieren Java Basics - Anfänger-Themen 4
M Felder leer - überprüfen? Java Basics - Anfänger-Themen 2
S reflection und felder Java Basics - Anfänger-Themen 12
X Verknüpfte Excel Felder mitändern Java Basics - Anfänger-Themen 6
Z Erste Schritte 9x9 Felder Erzeugen+Aufrufen Java Basics - Anfänger-Themen 1
S Wie instanziert man Felder? Java Basics - Anfänger-Themen 11
V Zwei Felder Adderen Java Basics - Anfänger-Themen 2
W Methoden Falsche Felder von Methode belgegt Java Basics - Anfänger-Themen 14
M Spielfeld mit 10x10 Felder Java Basics - Anfänger-Themen 13
E Felder bei falscher Eingabe leeren Java Basics - Anfänger-Themen 8
S Felder mit Variablen/Tabellen verknüpfen! Java Basics - Anfänger-Themen 3
M Felder mit Methode verändern Java Basics - Anfänger-Themen 11
W Datentypen Felder mit Potenzen Java Basics - Anfänger-Themen 31
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
C Felder(Größte Zahl, Index) Java Basics - Anfänger-Themen 6
K Felder Java Basics - Anfänger-Themen 5
M 3 Felder, Barcode, reinschreiben in die DB Java Basics - Anfänger-Themen 30
D Datentypen Felder: Deklaration und Initialisierung Java Basics - Anfänger-Themen 5
C Java Felder bearbeiten Hilfe Java Basics - Anfänger-Themen 4
H Felder mit unterschiedl. Typen sortieren Java Basics - Anfänger-Themen 5
B n-dimensionale Felder in m-dimensionale Felder konvertiert Java Basics - Anfänger-Themen 30
H felder vergleichen Java Basics - Anfänger-Themen 6
A Felder Java Basics - Anfänger-Themen 7
A Mehrdimensionale Felder Java Basics - Anfänger-Themen 18
C Felder im Dialog zurücksetzen Java Basics - Anfänger-Themen 3
E Wechselnde Felder erzeugen Java Basics - Anfänger-Themen 15
maddin86 Eine Methode für ein- und zweidimensionale double Felder als Parameter? Java Basics - Anfänger-Themen 5
A Felder- Minimum/Maximum Java Basics - Anfänger-Themen 2
D Felder Java Basics - Anfänger-Themen 7
D Felder Java Basics - Anfänger-Themen 2
T Border Layout alle mittleren felder gleich groß Java Basics - Anfänger-Themen 3
C Speicherverwaltung für Felder Java Basics - Anfänger-Themen 8
S EINDIMENSIONALE FELDER? Java Basics - Anfänger-Themen 23
G 3. Aufgaben und komme nicht weiter (Felder, Methoden) Java Basics - Anfänger-Themen 3
M Felder (Wo liegt der Fehler?) Java Basics - Anfänger-Themen 2
D Wie werden Felder grau? Java Basics - Anfänger-Themen 26
S generische Felder Java Basics - Anfänger-Themen 2
A Felder Java Basics - Anfänger-Themen 3
D String mit split teilen und leere Felder behalten Java Basics - Anfänger-Themen 4
R Felder unterschiedlichen Typs Java Basics - Anfänger-Themen 9
J 2 Felder aus DB selektieren u. in JList - eines verstecken? Java Basics - Anfänger-Themen 7
T Suche über mehrere Felder value = key = value Java Basics - Anfänger-Themen 3
B Array doppelt Felder löschen Java Basics - Anfänger-Themen 27
B clone(), Clonable und Felder von Interfacetypen Java Basics - Anfänger-Themen 3
G Felder kopieren Java Basics - Anfänger-Themen 8
G Felder-Länge Java Basics - Anfänger-Themen 2
G Felder zurückgeben? Java Basics - Anfänger-Themen 3
C Früheste Datum aus 3 Felder Java Basics - Anfänger-Themen 20
M Felder innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 2
D Felder vergleichen Java Basics - Anfänger-Themen 14
D Verbindung von Methoden und Felder Java Basics - Anfänger-Themen 3
A Aus dem menü heraus andere Felder bearbeiten Java Basics - Anfänger-Themen 2
S Statische Felder - statische Methoden Java Basics - Anfänger-Themen 2
G variable felder in java? geht das? Java Basics - Anfänger-Themen 4
I @Inject in normaler Klasse? Java Basics - Anfänger-Themen 4
P Enum oder normale Klasse? Java Basics - Anfänger-Themen 10
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Klasse in Runden Klammern bei Objektimplementierung Java Basics - Anfänger-Themen 4
J Klassen Klasse als Komponententyp bei Feldern Java Basics - Anfänger-Themen 2
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
Detlef Bosau nichtstatische Innere Klasse, this Pointer. Java Basics - Anfänger-Themen 47
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
B Klasse statisch erstellen da n-mal geladen Java Basics - Anfänger-Themen 3
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
frager2345 Optional Klasse Java Java Basics - Anfänger-Themen 2
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
H Klassen Typ und Intitialisierungs-Klasse, wer bestimmt was? Java Basics - Anfänger-Themen 1
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
frager2345 Java Klasse Buch verwalten Java Basics - Anfänger-Themen 0
frager2345 Java eigen Klasse zum verwalten von Büchern Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
C Int an andere Klasse übergeben Java Basics - Anfänger-Themen 26
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben