Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
Oh 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?
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.
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
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()
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:
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'.
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
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.
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.