Kapselung Member korrekt nach aussen verfügbar machen

Scarabol

Mitglied
Hi Leute,

bin seit kurzer Zeit von C++ zu Java gewechselt.

Ich vermisse "const" sehr. Daher folgende Frage:

Wenn ich in einer Klasse eine Member-Objekt speicher und dieses setzen möchte z.B.:
Java:
class test
{
meineKlasse obj;

public void setzteObj(meineKlasse variable)
{
// Methode 1
obj = variable;
// Methode 2
obj = new meineKlasse(variable);
}

public meineKlasse getObj()
{
// Methode 1
return obj;
// Methode 2
return meineKlasse(obj);
}
}

Welche Methode ist die bessere?
Macht es Sinn immer den Kopierkonstruktor zu benutzen?
Besonders wichtig ist natürlich, dass der Inhalt von obj NUR über set verändert werden kann und nicht über das von getObj() zurückgegebene Objekt/Referenz.

MfG
Scarabol
 

ARadauer

Top Contributor
Methode 1

Generel in Java Klassen groß schreiben und es gibt sowas wie Standards wie ein getter und setter auszusehen hat...

zb
Java:
public class Test {
    
    private MeineKlasse obj;

    public MeineKlasse getObj() {
        return obj;
    }

    public void setObj(MeineKlasse obj) {
        this.obj = obj;
    }     

}

Wobei wenn ichs mir recht überlege macht, deine Variante 2 eigentlich was anderes. Gehst du davon aus das meineKlasse einen Copy Konstruktur implementiert?
In Variante 1 hättest du dann in der Klasse das selbe objekt. Und in Variante 2 hättest du ein neues..
 
B

bygones

Gast
Hi,

vielen Dank für deine Antwort.

Wie wird bei deinem getter verhindert, dass das Objekt verändert wird?

MfG
Scarabol

zum einen in dem man nur getter bzw setter anbietet wenn es WIRKLICH noetig ist.
Per default sollte man keine anbieten.

Ansonsten bist du fuer die Aenderungsverhinderung zustaendig. Z.b. wenn die Variable nur ueber den konstruktor gesetzt werden soll, mach sie final.

Natuerlich musst du auch transitive Aenderungen beruecksichtigen, also wenn du ein Objekt zurueckgibst, soll dieses natuerlich auch am besten immutable sein.

Bei zb Collection gibts in der Klasse Collections die methoden unodifable, die deine Collection wrappen und unveraenderlich machen
 

Marco13

Top Contributor
Ja, der Fluch und Segen von "const" (mit seiner im Vergleich zu "final" ja auch "tiefen" Bedeutung). Ein Segen, weil es sehr praktisch sein kann, und es erlaubt, sauber gekapselten Code zu schreiben und Veränderbarkeit einzuschränken. Ein Fluch, weil ... na, das weiß jeder, der schonmal bei einer tief im Code versteckten
Code:
void doSomething(const * const something) const;
gek**** hat, weil der Compiler sich beschwert ... die "Const-Correctness" kann SO einen Haufen Doppel- und Dreifacharbeit (in bezug auf Planung UND Implementierung) bedeuten, dass ... mir das einfachere, klarere Java da doch lieber ist.

Aber es stimmt schon, dass das "Tiefe Const" von C++ in Java nur bedingt (und wenn, dann nur bedingt "schön") umgesetzt werden kann. Ein nicht unübliches Pattern hat bygones mit den Collections.unmodifiable* schon angedeutet: Wenn man z.B. eine List speichert, sollte man die i.a. nicht veränderbar nach draußen geben:
Java:
class SomeClass
{
    private List<String> list = ...

    public List<String> getList()
    {
        return Collections.unmodifiableList(list);
    }
}

Etwas allgemeiner und flexibler kann man gegebenenfalls (das muss man sich überlegen) bei eigenen Klassen/Interfaces sein. Zum Beispiel KÖNTNE es sowas geben wie
Java:
interface Person {
    String getName();
}

interface MutablePerson extends Person {
    void setName(String name);
}


class SomeClass
{
    private MutablePerson person = new DefaultPerson();

    public Person getPerson()
    {
        return person; // Gibt nur "Person" nach draußen - Person kann nicht geändert werden
    }
 
    private void doRename()
    {
        this.person.setName("New Name"); // Intern ist aber die Veränderbare Person bekannt!
    }
}
Das kann, wenn man es Konsequent umsetzen will, auch ein bißchen aufwändig werden, aber es bietet einige Interessante Möglichkeiten (z.B. in Verbindung mit Kovarianz)
 

Scarabol

Mitglied
ok danke euch.

Abschließend noch eine Frage:

[Java]
public void test(meineKlasse obj)
{
member = obj;
}

meineKlasse busted = new meineKlasse();
test(busted);
[/Java]

Was passiert mit member, wenn busted wirklich zerstört wird?

MfG
Scarabol
 
G

Gast2

Gast
Die Referenz die member auf das Objekt meineKlasse hat wird mitgelöscht. Das Objekt an sich bleibt aber weiterbestehen solang noch Referenzen darauf existieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
W OOP Member anderer Klassen erreichen Java Basics - Anfänger-Themen 1
Luk10 Member-Variablen mit settern setzten Java Basics - Anfänger-Themen 9
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
S Gutes Design mit statischen oder Member-Methoden Java Basics - Anfänger-Themen 53
E Statische Member können nicht vererbt werden? Java Basics - Anfänger-Themen 10
hdi kleine Verständnisfrage lokale + Member Variable Java Basics - Anfänger-Themen 10
A Zugriff auf Member-Variablen Java Basics - Anfänger-Themen 8
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
Kotelettklopfer Output korrekt trotz falschem Lösungsweg !? Java Basics - Anfänger-Themen 99
dome385 Ball Ball Kollision physikalisch korrekt Java Basics - Anfänger-Themen 5
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
tom.j85 Map - Values nicht korrekt ersetzt (Abzählspiel) Java Basics - Anfänger-Themen 13
R Compiler-Fehler HalloWelt-Programm korrekt abgeschrieben, trotzdem Fehlermeldungen Java Basics - Anfänger-Themen 2
M Strasse und Huasnummer korrekt eingeben Java Basics - Anfänger-Themen 13
D JAVA JDK korrekt installieren javac wird nicht gefunden Java Basics - Anfänger-Themen 2
C JFreeChart Linie nicht korrekt dargestellt Java Basics - Anfänger-Themen 1
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
E Gleitkomma zahlen mathemathisch korrekt multiplizieren Java Basics - Anfänger-Themen 5
D Abfrage ob Variableninhalt korrekt Java Basics - Anfänger-Themen 5
M JMadex funktioniert nicht korrekt Java Basics - Anfänger-Themen 8
G OOP Klassenaufbau korrekt? / MVC Java Basics - Anfänger-Themen 1
S JTabel korrekt mit Datensätzen aus ResultSet füllen Java Basics - Anfänger-Themen 4
R Upload Servlet: Ausgabe nicht korrekt Java Basics - Anfänger-Themen 2
J String Ausgabe nicht-leerer Zeichen nicht korrekt Java Basics - Anfänger-Themen 10
K Wie übergebe ich hier korrekt die Werte Java Basics - Anfänger-Themen 5
U Attributsnamen korrekt oder falsch? Java Basics - Anfänger-Themen 4
G Exe-Datei korrekt in JAR ablegen Java Basics - Anfänger-Themen 4
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
Burny91 Compiler-Fehler Regular Expressions matchen nicht korrekt Java Basics - Anfänger-Themen 5
M Tag Monat Jahr korrekt berrechnen! Java Basics - Anfänger-Themen 10
M Calendar-Prüfung funktioniert nicht korrekt Java Basics - Anfänger-Themen 6
M String wird nicht korrekt ausgelesen. Java Basics - Anfänger-Themen 11
L Referenced Libraries korrekt in Java Applet einbinden.. Java Basics - Anfänger-Themen 2
M OOP JLabel werden nicht korrekt eingefärbt Java Basics - Anfänger-Themen 6
F JSlider korrekt implementieren Java Basics - Anfänger-Themen 19
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
S Benutzereingabe über Scanner Klasse korrekt behandeln Java Basics - Anfänger-Themen 9
L If/else nicht korrekt ausgeführt. Java Basics - Anfänger-Themen 22
K methode wird nur einmal korrekt durchlaufen Java Basics - Anfänger-Themen 4
F Verschlüsselten Text korrekt ausgeben Java Basics - Anfänger-Themen 2
Developer_X Applikation kann nicht korrekt von anderen Applikationen aufgerufen werden Java Basics - Anfänger-Themen 10
K Symbole werden nicht korrekt angezeigt ? Java Basics - Anfänger-Themen 7
G Maven Dependency für Oracle JDBC-Driver korrekt festlegen Java Basics - Anfänger-Themen 4
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
Antoras Durchschnitt ist nicht korrekt; Eingaben löschen Java Basics - Anfänger-Themen 7
G Wochentag und Jahrtag werden nicht korrekt ermittelt Java Basics - Anfänger-Themen 8
G SwingWorker funktioniert nicht korrekt Java Basics - Anfänger-Themen 16
J Ein Fenster korrekt schließen? Java Basics - Anfänger-Themen 4
U Double-Variable führt Division nicht korrekt aus Java Basics - Anfänger-Themen 4
S UML korrekt umgesetzt? Java Basics - Anfänger-Themen 14
U GUI wird nicht korrekt angezeigt Java Basics - Anfänger-Themen 8
M Kommentare - so korrekt? Java Basics - Anfänger-Themen 8
G Geöffnete Datei schreiben korrekt schreiben? Java Basics - Anfänger-Themen 6
G Warum ist der folgende Code korrekt? Java Basics - Anfänger-Themen 2
G Eingabe wird nicht korrekt eingelesen? Java Basics - Anfänger-Themen 2
G Buffered REader, String, ist mein code korrekt? Java Basics - Anfänger-Themen 4
R Look & Feel wird nicht korrekt angezeigt Java Basics - Anfänger-Themen 9
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
D Programmieren nach UML Java Basics - Anfänger-Themen 2
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
K log4j nach log4j2 überführen Java Basics - Anfänger-Themen 0
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben