簡體   English   中英

Java 嘗試使用資源和 `AutoCloseable` 接口

[英]Java try with resources and `AutoCloseable` interface

我正在尋找與 python 的with語句等效的 Java,並且我閱讀了有關實現AutoCloseable接口和使用資源的 try 的信息。

在 python 中,上下文管理器( with語句)使用兩種方法: __enter____exit__ ,但在 Java 中,try with resources 塊僅使用close ,相當於__exit__

__enter__方法是否有等效方法,以便在進入 try with resources 塊時自動執行某個方法,而不僅僅是在塊結束時?

等效的基本上是您在try獲取AutoCloseable實例時所調用的任何內容。 這可能是一個構造函數,如:

try (MyClass obj = new MyClass()) { …

具有這樣一個構造函數的類如下所示:

public class MyClass implements AutoCloseable {
    public MyClass() {
        // do "enter" things...
    }

    @Override
    public void close() {
        // close resources
    }
}

根據您需要“輸入”執行的操作,您可能更喜歡類的靜態生產者,如下所示:

try (MyClass obj = MyClass.getInstance(someProperties)) { …

那么你的班級可能看起來像這樣:

public class MyClass implements AutoCloseable {
    private MyClass() {
        // instantiate members
    }

    public static MyClass getInstance(Properties config) {
        // you could implement a singleton pattern or something instead, for example
        MyClass obj = new MyClass();
        // read properties...
        // do "enter" things...
        return obj;
    }

    @Override
    public void close() {
        // close resources
    }
}

您甚至可以在try生成AutoCloseable時調用工廠或構建器模式。 這完全取決於您的設計以及您需要實例在“進入”時執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM