im Buch Java ist eine Insel kommt beim einlesen eines Streams mit der Klasse URL folgende Schreibweise auf
v = new Scanner(inStream).useDelimiter("\\Z").next();
Was da passiert ist mir klar aber wie kann ich bei einem eigenen Objekt diese Schreibweise (verschachtelte Methoden) hinbekommen.
ALso ich meine klar ist das Scanner der InputStreamübergeben wird und dann die Metlde useDelimiter aufgerufen wird aber ist dann next() eine lokale methode von usedelimiter??? Ich meine wieso wird das so geschachtelt?
Hoffe es versteht mich einer wie ich das meine geht mir nur um die Schreibweise des ganzen. Ist ja irgendwie abgekürzt Gültig ist ja auch ....
v = new Scanner(inStream)
v.useDelimiter("\\Z");
v.next();
Dazu müssten sich die Methoden doch auf der gleichen Ebene befinden.
Nein! Sie müßten nur von derselben Klasse implementiert werden.
Nun ist es jedoch so, daß die Methode useDelimiter(...) eben auch auch einen
Scanner zurückliefern.
Es ist so ähnlich wie bei Mehrfach hintereinander-Aufrufen der Methode append(...) bei
Stringbuffern: Jeder Aufruf appendet einen String an den Buffer und liefert
ihn auch gleichzeitig wieder zurück.
Ganz witzig!
Ob jetzt aber auch die Methode next() einen Scanner zurückliefert glaube ich
eher weniger... :bahnhof:
ALso ich meine klar ist das Scanner der InputStreamübergeben wird und dann die Metlde useDelimiter aufgerufen wird aber ist dann next() eine lokale methode von usedelimiter??? Ich meine wieso wird das so geschachtelt?
Danke für die schnelle Antwort. Also hier der Source wor diese Anweisung kommt.
Mein Problem ist aber nicht was gibt next zurück sondern wie bekomme ich diese Schreibweise so hin.
Java:
packagecom.tutego.insel.net;importjava.io.IOException;importjava.io.InputStream;importjava.net.URL;importjava.util.Scanner;classReadAllFromUrl{publicstaticvoidmain(String[] args ){InputStream is =null;try{URL url =newURL(" [url]http://www.tutego.com/aufgaben/bond.txt[/url] ");
is = url.openStream();System.out.println(newScanner( is ).useDelimiter("\\Z").next());}catch(Exception e ){
e.printStackTrace();}finally{if( is !=null)try{ is.close();}catch(IOException e ){}}}}
Mein Problem ist aber nach wie vor wie schaffe ich es die Methoden der unten definierten Klasse wie folge aufzurufen. Eben wie im obigen Code auch?
Java:
Testme ccx =newTestme();
ccx.give1().give2();// ??????classTestme{publicvoidgive1(){System.out.println("Zum ersten 1");}publicvoidgive2(){System.out.println("Zum ersten 2");}}
na in deinem fall garnicht, da deine methoden void , also nichts zurückgeben. wenn die methode
public void give1() jetzt z.b. so aussehen würde
public String give1() ..
würdest du ja einen string zurückgeben und könntest anschließend eine stringoperation drauf anwenden...(mir ist spontan kein besseres objektbeispiel als string eingefallen /edit, siehe next post )