class in class

NeCIAx

Mitglied
Hallo zusammen,
ich bin nicht sonderlich gut im programmieren aber arbeite daran :)

Mein Problem ist das ich einen Server für einen Chat gebastelt habe und dort eine class in der Server class habe und möchte aus einer zweiten class Datei darauf zugreifen ich habe es jetzt so versucht:
Java:
import SourceCode.Server.ClientHandler;

public class Server_Methods {
   
    private Server server;
    private DB_Connect dbcon;
    private ClientHandler clienthandler;
   
    public Server_Methods(Server server, DB_Connect dbcon) {
        this.server = server;
        this.dbcon = dbcon;
    }
   
    public void Client_Login(String username, String password){
       
        if (dbcon.LoginPruefen(username,password) == 1) {
            String antwort = "04";
            clienthandler.sendMSG(antwort);
          }                

    }
   
}

Hierbei ist Server die Server.class und Client_Handler die classe die mit in der Server.class drinne ist. Dabei versuchte ich es damit import SourceCode.Server.ClientHandler; aber ich bekomme diese Fehlermeldung :

Exception in thread "Thread-4" java.lang.NullPointerException
at SourceCode.Server_Methods.Client_Login(Server_Methods.java:20)
at SourceCode.Server$ClientHandler.run(Server.java:182)
at java.lang.Thread.run(Thread.java:745)

Server.java:182 ist der Aufruf der methode Client_Login.

Hier zu sehen:
Java:
else if (nachricht.startsWith("04")) {//login bestätigen
                
                  String[] clientdata = nachricht.substring(2).split(";");
                  console.appendTextToArea("Client [ " + clientdata[0] + " ] sendet Logindaten zur bestätigung !", console.ORANGE);
                  methods.Client_Login(clientdata[0], clientdata[1]);
                /* if (dbconnect.LoginPruefen(clientdata[0],clientdata[1]) == 1) {
                     String antwort = "04";
                     this.writer.println(antwort);
                     this.writer.flush();
                  }          */      
              }

Das was auskommentiert ist, funktioniert. Mein vorhaben ist einfach nur das ich die Methoden auslagere damit die Server.class klein bleibt.

Jetzt schon mal vielen Dank an euch. :D
 

StarSheriff

Mitglied
Du musst deine importierte Klasse auch noch initialisieren, ala:

Java:
ClientHandler clientHandler = new ClientHandler();

ggf. halt den Konstruktoraufruf anpassen, falls es den Standardkonstruktor in dieser Klasse nicht gibt.
 

NeCIAx

Mitglied
Oh :D wenn man sich zu sehr auf verschiedene dinge fixiert fällt so etwas kaum auf. Werde es gleich mal testen , ist es eigentlich so die feine Englische Art eine classe in einer classe zu schreiben oder ist es besser/sinnvoller eine extra Datei wegen der Übersicht zu erstellen?
 

tommysenf

Top Contributor
ist es eigentlich so die feine Englische Art eine classe in einer classe zu schreiben oder ist es besser/sinnvoller eine extra Datei wegen der Übersicht zu erstellen?

Es ist üblich eine Klasse in eine eigene Datei zu schreiben. Für 1. Level public Klassen ist das sogar verpflichtend. Embedded Classes machen eigentlich nur dann Sinn, wenn nur von der einbettenden Klasse darauf zugegriffen wird. Einen sinnvollen Einsatzzweck für eine public embedded class habe ich noch nie gesehen. Lasse mich da aber gerne eines besseren belehren.
 

mrBrown

Super-Moderator
Mitarbeiter
Einen sinnvollen Einsatzzweck für eine public embedded class habe ich noch nie gesehen. Lasse mich da aber gerne eines besseren belehren.
Unit-Tests, die kann man recht gut strukturieren, wenn alle Tests für eine Methode in jeweils einer Nested-class liegen. Benutz man dann natürlich nicht selbst sondern nur implizit übers Framework
 

XyMorgan

Aktives Mitglied
Wird als DataBean durchaus hier und da gemacht.

z.B.
Java:
/**
* Pseudo Code
*
*/
public class Suche {
    private List<Treffer> treffer ......
   
    public Suche() {
       
    }

    public List<Treffer> getTreffer() {
        return treffer;
    }
   
    /**
     * Treffer DataBean
     *
     */
    public class Treffer {
        String inhalt;
        String .....
       
        public void getInhalt() {
            ...
        }
       
        ......
    }
}
 

CSHW89

Bekanntes Mitglied
In diesem Fall könnte die Klasse aber mit ziemlicher Sicherheit 'static' sein oder? Ich sehe das genauso: eine Klasse in einer anderen ist nur mit einem der Modifier 'private', 'static' oder aller höchstens noch mit 'protected' wirklich sinnvoll. Schon allein das Erstellen eines Objekts der Klasse außerhalb ist wirklich unschön:
Java:
new Suche().new Treffer()  /// bzw.
suche.new Treffer()
lg Kevin
 

mrBrown

Super-Moderator
Mitarbeiter
In diesem Fall könnte die Klasse aber mit ziemlicher Sicherheit 'static' sein oder? Ich sehe das genauso: eine Klasse in einer anderen ist nur mit einem der Modifier 'private', 'static' oder aller höchstens noch mit 'protected' wirklich sinnvoll. Schon allein das Erstellen eines Objekts der Klasse außerhalb ist wirklich unschön:
Naja, kann es Such-Treffer ohne Suche geben oder gehört ein Treffer immer zu einer Suche? ;)
 

CSHW89

Bekanntes Mitglied
Kommt natürlich drauf an, was man in Treffer braucht. Wenn man keine Informationen der Suche braucht, macht man Treffer 'static' und alles ist gut. Wenn allerdings doch, macht es kein Sinn, dass Treffer publich ist, da man die Klasse eh nicht instantieren kann ohne eine Suche. Die Informationen hängen wohl irgendwie zusammen, und damit sollte es nicht möglich sein, willkürlich einen Treffer mit irgendeinerm Such-Objekt zu erstellen. Natürlich könnte man einen privaten Konstruktor in Treffer erstellen, aber dann besteht immer noch die Frage, warum muss man sie sehen. Klar, weil man auf die Attribute zugreifen will. Dies lässt sich aber auch mit einem Interface viel eleganter lösen:
Java:
public class Suche {
    private List<Treffer> treffer
    public Suche() {
    }
    public List<Treffer> getTreffer() {
        return treffer;
    }
    private class TrefferImpl implements Treffer {
        String inhalt;
        public String getInhalt() {
            return inhalt;
        }
    }
}
public interface Treffer {
    public String getInhalt();
}
PS: wenn man unbedingt will, kann man das Interface Treffer natürlich in Suche reintun. Ein Interface ist ja quasi 'static'.
 
Zuletzt bearbeitet:

XyMorgan

Aktives Mitglied
Viele Wege führen nach Rom. Es ging nur um ein Beispiel. Die Frage war Klasse in Klasse, ob Sinnvoll oder nicht. Und ja es ist ab und an sinnvoll und wird durchaus verwendet. Ob static, protected spielt bei der Antwort auf die frage keine Rolle.

Falls das Beispiel zu abstrakt war -> hier mal eins zum Nachschauen:
BooleanQuery aus dem Lucene-Package
 

CSHW89

Bekanntes Mitglied
Ob static, protected spielt bei der Antwort auf die frage keine Rolle.
Natürlich spielt das eine Rolle. Eine nested Klasse, die man von außen nur dann instanzieren kann, wenn man ein Objekt der umgebenen Klasse besitzt, macht meiner Meinung nach keinen Sinn. Darunter fallen nun mal keine static, private und protected nested Klassen.
Das Beispiel "BooleanQuery aus dem Lucene-Package" ist eine static nested Klasse und demnach vollkommen legitim.
 
Zuletzt bearbeitet:

XyMorgan

Aktives Mitglied
Es war bei meinem Beispiel nur ein Beispiel :) Es war keine fertige Klasse, und deine Korrektur des Beispiels bzw. Einwände sind ja auch passend. -> Daher Ja, es kann sinnvoll sein, unter Berücksichtigung der richtigen Modifier und 471,1 anderen Gründen.

Why Use Nested Classes?
Compelling reasons for using nested classes include the following:

  • It is a way of logically grouping classes that are only used in one place: If a class is useful to only one other class, then it is logical to embed it in that class and keep the two together. Nesting such "helper classes" makes their package more streamlined.

  • It increases encapsulation: Consider two top-level classes, A and B, where B needs access to members of A that would otherwise be declared private. By hiding class B within class A, A's members can be declared private and B can access them. In addition, B itself can be hidden from the outside world.

  • It can lead to more readable and maintainable code: Nesting small classes within top-level classes places the code closer to where it is used.

Quelle: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T IntelliJ / SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". Java Basics - Anfänger-Themen 4
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
123456789sssssaaaa Java Wrapper Class Java Basics - Anfänger-Themen 13
FHEFHJHFJH error: class names, 'summe_bsp', are only accepted if annotation processing is explicitly requested Java Basics - Anfänger-Themen 3
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
G Could not initialize class “NoClassDefFoundError" Java Basics - Anfänger-Themen 2
Mr_Kleeblatt Operatoren if (arri[i] != "test.java"&& arri[i] != "test.class") Java Basics - Anfänger-Themen 3
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
J Klassen .class Datei öffnen Java Basics - Anfänger-Themen 31
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
O Verständniss Problem bei abstract class Java Basics - Anfänger-Themen 7
H .class Datei wird nicht ausgeführt Java Basics - Anfänger-Themen 2
H .jar unterschied .class Java Basics - Anfänger-Themen 3
J class version 52 und 56 Java Basics - Anfänger-Themen 6
L Fehler bei der AUsführung der .class Datei Java Basics - Anfänger-Themen 23
A Class not found - Jar liegt am classpath Java Basics - Anfänger-Themen 2
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
D jsoup get class name mit leerzeichen Java Basics - Anfänger-Themen 7
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
N Fehlende .class Datei Java Basics - Anfänger-Themen 4
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
W Externe class in Eclipse importieren Java Basics - Anfänger-Themen 0
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
S Klassen Class mit Funktionen importieren Java Basics - Anfänger-Themen 1
L jar, class, java und wieder zurück Java Basics - Anfänger-Themen 8
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
S setText aus anderer class heraus Java Basics - Anfänger-Themen 6
L Classpath Zwei Bibliotheken enthalten gleiche .class Datei Java Basics - Anfänger-Themen 6
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
wilmaed protected class Java Basics - Anfänger-Themen 0
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
P could not find main class obwohl da Java Basics - Anfänger-Themen 17
UnityFriday method getPrevious in class List<ContentType> cannot be applied to given types Java Basics - Anfänger-Themen 29
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
D Compiler-Fehler error: .class expected Java Basics - Anfänger-Themen 2
S Dataflow von Start bis die SystemProperties class Java Basics - Anfänger-Themen 1
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
M Scanner class Java Basics - Anfänger-Themen 6
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
P Compiler-Fehler Could not load or find main class fehler Java Basics - Anfänger-Themen 15
J Gestaltung der GUI.class Java Basics - Anfänger-Themen 1
P Compiler-Fehler could not find or load main class Java Basics - Anfänger-Themen 5
Z Gleiches Verzeichnis für class und java unter Windows Muss? Java Basics - Anfänger-Themen 11
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
S Vererbung Fehlermeldung: the hierarchy of the type "class name" is inconsistent Java Basics - Anfänger-Themen 10
J Erste Schritte .class datei in meine form inkludieren Java Basics - Anfänger-Themen 3
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
M Class Datein aus einen Unterordner verwenden Java Basics - Anfänger-Themen 2
B .class-File mit Reflection auslesen Java Basics - Anfänger-Themen 8
C class in main aufrufen (SWT Oberfläche) Java Basics - Anfänger-Themen 5
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
D error: Class names, >>>HILFE, anfänger<<< Java Basics - Anfänger-Themen 4
M Class nach Namensänderung nicht mehr vorhanden Java Basics - Anfänger-Themen 6
P .class 2 .exe ? Java Basics - Anfänger-Themen 5
N Compiler-Fehler HundTestlauf class Fehler Java Basics - Anfänger-Themen 4
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
H Umgebungsvariable In DOS-Box läuft die fehlerfreie Class-Datei nicht. Java Basics - Anfänger-Themen 5
J Compiler-Fehler bootstrap class path not set in conjunction with -source 1.6 Java Basics - Anfänger-Themen 2
J Interface compatible to a class Java Basics - Anfänger-Themen 7
Phil42 "Local variable i is accessed from within inner class" Java Basics - Anfänger-Themen 3
F .class expected Java Basics - Anfänger-Themen 3
S Erste Schritte Ausführen einer Class Datei Java Basics - Anfänger-Themen 6
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
K Frage zu Class Operator Java Basics - Anfänger-Themen 2
G Threads SuM Class Animation Java Basics - Anfänger-Themen 13
F Befehle von Java class ausführen Java Basics - Anfänger-Themen 3
G default class type Java Basics - Anfänger-Themen 3
Luk10 Generisches Class<...>[] Java Basics - Anfänger-Themen 15
Luk10 instanceof Class<T> Java Basics - Anfänger-Themen 6
N Probleme mit Class in andere Class adden (Cardlayout) Java Basics - Anfänger-Themen 2
R Classpath Setzen von class Verzeichnissen Java Basics - Anfänger-Themen 2
N Klassen Class nur einmal ausführen und sie speichert daten für alle anderen classes? Java Basics - Anfänger-Themen 3
U Class.newInstance() Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben