File tree Expand file tree Collapse file tree
core-java-modules/core-java-9/src
main/java/com/baeldung/java9/finalizers
test/java/com/baeldung/java9/finalizers Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package com .bealdung .java9 .finalizers ;
2+
3+ import java .lang .ref .Cleaner ;
4+
5+ class CleaningDemo {
6+
7+ public static void main (String [] args ) {
8+ final Cleaner cleaner = Cleaner .create ();
9+ try (Order order = new Order (cleaner )) {
10+ for (int i = 0 ; i < 10 ; i ++) {
11+ order .register (new Product (i ), i );
12+ }
13+ } catch (Exception e ) {
14+ System .err .println ("Error: " + e );
15+ }
16+ }
17+ }
Original file line number Diff line number Diff line change 1+ package com .bealdung .java9 .finalizers ;
2+
3+ import java .lang .ref .Cleaner ;
4+
5+ class Order implements AutoCloseable {
6+
7+ private final Cleaner cleaner ;
8+ private Cleaner .Cleanable cleanable ;
9+
10+ public Order (Cleaner cleaner ) {
11+ this .cleaner = cleaner ;
12+ }
13+
14+ public void register (Product product , int id ) {
15+ this .cleanable = cleaner .register (product , new CleaningAction (id ));
16+ }
17+
18+ public void close () {
19+ cleanable .clean ();
20+ System .out .println ("Cleanable closed" );
21+ }
22+
23+ static class CleaningAction implements Runnable {
24+
25+ private final int id ;
26+
27+ public CleaningAction (int id ) {
28+ this .id = id ;
29+ }
30+
31+ @ Override
32+ public void run () {
33+ System .out .printf ("Object with id %s is garbage collected. %n" , id );
34+ }
35+ }
36+ }
Original file line number Diff line number Diff line change 1+ package com .bealdung .java9 .finalizers ;
2+
3+ class Product {
4+ private final int id ;
5+
6+ public Product (int id ) {
7+ this .id = id ;
8+ }
9+
10+ public int getId () {
11+ return id ;
12+ }
13+ }
Original file line number Diff line number Diff line change 1+ package com .bealdung .java9 .finalizers ;
2+
3+ import java .io .BufferedReader ;
4+ import java .io .FileNotFoundException ;
5+ import java .io .FileReader ;
6+
7+ class Resource implements AutoCloseable {
8+
9+ final BufferedReader reader ;
10+
11+ public Resource (String filename ) throws FileNotFoundException {
12+ reader = new BufferedReader (new FileReader (filename ));
13+ }
14+
15+ public long getLineNumber () {
16+ return reader .lines ()
17+ .count ();
18+ }
19+
20+ @ Override
21+ public void close () throws Exception {
22+ reader .close ();
23+ System .out .println ("BufferedReader resource closed" );
24+ }
25+ }
Original file line number Diff line number Diff line change 1+ package com .bealdung .java9 .finalizers ;
2+
3+ import org .junit .jupiter .api .Test ;
4+
5+ import java .io .BufferedWriter ;
6+ import java .io .File ;
7+ import java .io .FileWriter ;
8+ import java .io .IOException ;
9+
10+ import static org .junit .jupiter .api .Assertions .assertEquals ;
11+
12+ class FinalizeUnitTest {
13+
14+ @ Test
15+ void givenFilename_whenGetLineNumber_thenReturnCorrectNumber () throws IOException {
16+ final File tmpFile = File .createTempFile ("test" , ".tmp" );
17+ final BufferedWriter writer = new BufferedWriter (new FileWriter (tmpFile ));
18+ writer .write ("Baeldung" );
19+ writer .close ();
20+
21+ long lineNumber = 0 ;
22+ try (Resource resource = new Resource (tmpFile .getAbsolutePath ())) {
23+ lineNumber = resource .getLineNumber ();
24+ } catch (Exception e ) {
25+ System .err .println ("Error " + e );
26+ }
27+
28+ assertEquals (1 , lineNumber );
29+ }
30+ }
You can’t perform that action at this time.
0 commit comments