Thomas Darimont
Erfahrenes Mitglied
Hallo,
hier mal ein kleines Beispiel dazu wie man in Java 8 - Lambda Ausdrücke mit try-with Resources Konstrukten kombinieren kann:
Ausgabe:
Gruß Tom
hier mal ein kleines Beispiel dazu wie man in Java 8 - Lambda Ausdrücke mit try-with Resources Konstrukten kombinieren kann:
Java:
package de.tutorials.training;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;
interface ResourceFactory<R extends Resource> {
R create();
}
class ResourceProcessor<R extends Resource> {
public ResourceProcessor(ResourceFactory<R> factory, Consumer<R> consumer) {
try (R res = factory.create()) {
consumer.accept(res);
}
}
}
class Resource implements AutoCloseable {
public void op1() {
System.out.printf("op1 %s %n", this);
}
public void op2() {
System.out.printf("op2 %s %n", this);
}
@Override
public void close() {
System.out.printf("close %s %n", this);
}
public static void use(Consumer<Resource> block) {
try (Resource resource = new Resource()) {
block.accept(resource);
}
}
}
public class ResourceHandling {
public static void main(String[] args) {
//Beispiel 1: Try-with resources Konstrukt aus Java 7
try (Resource resource = new Resource()) {
resource.op1();
resource.op2();
}
System.out.println("###");
//Beispiel 2: Spezifikation der Verarbeitung einer Resource als Lambda-Ausdruck (in Kombination mit try-with Resource)
Resource.use(res -> {
res.op1();
res.op2();
});
System.out.println("###");
//Beispiel 3: Spezifikation einer ResourceFactory als Lambda-Ausdruck
new ResourceProcessor<Resource>(() -> new Resource(), (res) -> {
res.op1();
res.op2();
});
}
}
Ausgabe:
Code:
op1 de.tutorials.training.Resource@2f0e140b
op2 de.tutorials.training.Resource@2f0e140b
close de.tutorials.training.Resource@2f0e140b
###
op1 de.tutorials.training.Resource@7699a589
op2 de.tutorials.training.Resource@7699a589
close de.tutorials.training.Resource@7699a589
###
op1 de.tutorials.training.Resource@568db2f2
op2 de.tutorials.training.Resource@568db2f2
close de.tutorials.training.Resource@568db2f2
Gruß Tom