Den perfekte julegaven til Javakoden din Johannes Brodwall Steria
Wednesday, November 18th, Mark Reinhold from Sun announced that it was time for closures in Java.
This came as a surprise to everyone, but what was announced?
Hvorfor closures? Bygg bedre bibliotek.
Eksempel: Lese alle linjer i fil
void theOldWay(String[] args) throws IOException { BufferedReader reader = null; boolean done = false; try { FileReader filerdr = new FileReader(new File(args[0])) reader = new BufferedReader(fdr); String line; while ( (line = reader.readLine()) != null) { System.out.println("This is a line:" + line); } done = true; } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { if (done) throw e; } } }
Er dette rettferdig?
void theNewWay(String fname) throws IOException { forEachLine( new File( fname), #(String line) { System.out.println("This is a line:" + line); }); }
void theNewWay(String[] args) throws IOException { forEachLine( new File( args[0]), #(String line) { System.out.println("This is a line:"+line); }); }
Å bygge en funksjon som tar closures
public interface LineCallback { public void doForLine(String line) throws IOException; } public static void forEachLine(File file, final LineCallback lineCallback) throws IOException { doWithFile(file, #(Reader reader) { // … lineCallback.doForLine(line); } }); }
Hva er greia med disse #’ene?
OriginClass origin = new OriginClass(); origin.setBar("bar on origin"); TargetClass target = new TargetClass(); mapField( origin, OriginClass#bar, target, TargetClass#foo); System.out.println(target.getFoo());
OriginClass origin = new OriginClass(); origin.setBar("bar on origin"); TargetClass target = new TargetClass(); mapField( origin, OriginClass#bar, target, TargetClass#foo); System.out.println(target.getFoo());
OriginClass#bar Person#setSalary(int) #(String line) { System.out.println("This is a line:" + line); }
Fem ting du bør bruke closures til
Hva gjør vi for å komme rundt et dårlig språk
Funksjoner som frigir ressurser Interne iteratorer Asynkrone kall Callbacks Queries
Closures lar oss bygge bedre bibliotek.
Her kan du lære mer: (Implementasjon) the-language/ the-language/
Johannes Brodwall Chief Scientist Steria, Norway Takk for oppmerksomheten