Skip to content

Commit 151e298

Browse files
authored
Add - Is there a Destructor in Java (#12345)
1 parent 2d9171f commit 151e298

5 files changed

Lines changed: 121 additions & 0 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
}

0 commit comments

Comments
 (0)