标签: autocloseable

为什么使用块不能安全地初始化var?

为什么会出现编译错误?

val autoClosable = MyAutoClosable()
var myVar: MyType
autoClosable.use {
    myVar= it.foo()
}
println(myVar) // Error: Variable 'myVar' must be initialized
Run Code Online (Sandbox Code Playgroud)

也许编译器只是看作{ myVar= it.foo() }是一个传递给另一个函数的函数,并且不知道何时甚至是否会被执行?

但是,既然use不仅仅是一个函数,而且Kotlin取代了Java的资源尝试,那么关于它的一些特殊知识将是合适的,不是吗?现在,我被迫myVar用一些虚拟值初始化,这根本不符合Kotlin的精神.

kotlin autocloseable

4
推荐指数
1
解决办法
456
查看次数

为什么在try-with-resources中获取`Stream <String>`时BufferedReader没有关闭?

Stream在try-with-resources中使用a 时,应该关闭阅读器.

鉴于这种:

try(Stream<String> lines = new BufferedReader(reader).lines()) {
            return lines.map(it -> trim ? it.trim() : it)
                    .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

......读者没有被关闭?

此测试失败:

    AtomicBoolean closed = new AtomicBoolean(false);

    Reader r = new StringReader("  Line1 \n Line2") {

                @Override
                public void close() {
                    super.close();
                    closed.set(true);
                }

            };

    try(Stream<String> lines = new BufferedReader(r).lines()) {
            lines.map(it -> trim ? it.trim() : it)
                    .collect(Collectors.toList());
    }

    assertTrue("Reader was not closed.",closed.get());
Run Code Online (Sandbox Code Playgroud)

java java-8 try-with-resources java-stream autocloseable

3
推荐指数
1
解决办法
685
查看次数

使用 try-with-resources 关闭 Closeable

我有一个Map<Key, Closeable>,如果从地图上删除了一个键,我想关闭该Closeable。通常我有类似的东西:

Closeable c = map.remove(key);
c.close();
Run Code Online (Sandbox Code Playgroud)

我的 Eclipse 警告我“资源 'c' 应该由 try-with-resource 管理”,那么编写以下内容是否更好?

try (Closeable c = map.remove(key)) {}
Run Code Online (Sandbox Code Playgroud)

在我的特殊实现中,我有一个 的子类Closeable,其中close()不会抛出IOException,因此不需要异常处理。

java try-with-resources autocloseable

3
推荐指数
1
解决办法
9856
查看次数

预先JAVA 7 JDBC API与JAVA 7一起使用资源吗?

只需将应用程序转换为JAVA 7,并想知道是否有人遇到过使用资源和c3p0连接池的问题.

我想现在,如果你使用try with resources,JAVA会自动关闭数据库,准备好的语句和语句.

这是否意味着诸如JDBC驱动程序和c3p0之类的底层API必须实现AutoClosable?

我使用的是c3p0 0.9.2.1和jtds 1.3.0

jdbc c3p0 java-7 autocloseable

2
推荐指数
1
解决办法
177
查看次数

声明多个有效的最终资源时,try-with-resource 不安全吗?

从 Java 9 开始,我们可以在 try-with-resources 中有效地使用最终变量。

下面的示例展示了一种资源初始化引发异常的情况。

    public static void main(String[] args) {
        Resource1 r1 = new Resource1();
        Resource2 r2 = new Resource2(); // exception will be thrown
        try (r1; r2) {
            System.out.println("TryWithResources.main() try");
        } catch (Exception e) {
            System.out.println("TryWithResources.main() catch");
        }
    }
    
    static class Resource1 implements AutoCloseable {
        @Override
        public void close() throws Exception {
            System.out.println("TryWithResources.Resource1.close()");
        }
    }
    
    static class Resource2 implements AutoCloseable {
        public Resource2() {
            throw new RuntimeException();
        }
        @Override
        public void close() throws Exception {
            System.out.println("TryWithResources.Resource2.close()"); …
Run Code Online (Sandbox Code Playgroud)

java try-with-resources autocloseable java-9

2
推荐指数
1
解决办法
112
查看次数

如何关闭 AutoClosable 类型的静态变量?

I\xe2\x80\x99m 是 Java 库的作者,该库提供对我们公司销售的 C++ 库的 Java 访问。类 \xe2\x80\x9cown\xe2\x80\x9d C++ 对象之一的实例,具有以下意义:该类具有一些long由某些方法设置的私有字段native,并且具有指向C++ 堆。由于 C++ 堆不会被垃圾回收,因此当拥有的 Java 对象不再需要它们时,特别是当拥有的 Java 对象本身不再需要时,必须手动释放内存,因此该类实现AutoClosableclose()释放实例拥有的所有 C++ 内存。理想情况下,用户将try在该类的实例上使用 -with-resources。

\n

一位客户抱怨 SonarQube 警告他们, \xe2\x80\x99t 不会调用释放资源,并建议在对象上close()使用-with-resources,但该对象由变量或等效对象保存,并且一直存在,直到应用程序关闭(如据我了解)。我想帮助他们,但删除(按照他们的建议)根本就是\xe2\x80\x99不正确。问题与内存有关:当应用程序结束并且 C++ 库被卸载时,内存资源无论如何都会被释放(由操作系统)。trystaticAutoClosable

\n

那么,理想情况下,如何AutoClosable以 SonarQube 检测到的方式关闭静态变量所持有的对象呢?Java 似乎没有可以使用的与类初始值设定项相反的类型。

\n

我不\xe2\x80\x99t 有权访问SonarQube 来玩玩并看看什么可以工作,即当SonarQube 识别出close()将被调用时。我\xe2\x80\x99m 想要告诉他们应该适当地重新配置SonarQube 或抑制警告。问这个问题,我想确保它\xe2\x80\x99本质上是最好的行动方案。\xe2\x80\x9c是的,如果这是真的,\xe2\x80\x9d 将是一个合适的答案。当然,不使用全局状态,即没有 astatic AutoClosable是理所当然的,但我想他们已经知道了。

\n

似乎没有人遇到过static AutoClosable对象的问题,因为 Stack Overflow 上没有关于它的问题。\n我认为这与.NET (C#) 中AutoClosable的类似,并且我发现这个问题非常询问这个问题,但是答案特定于用例和 .NET,并且 …

java static try-with-resources sonarqube autocloseable

2
推荐指数
1
解决办法
98
查看次数

在try-wtth-resources块中使用GZIPOutputStream对象时,是否需要调用finish()

在try-with-resources [autoclosable]块中使用GZipOutputStream时,我在处理完资源finish()后是否需要显式调用?

java gzipoutputstream autocloseable

1
推荐指数
1
解决办法
862
查看次数

Autocloseable类不会调用默认的close方法

我有这段代码:

public class Resource implements AutoCloseable{

    private String s = "I am resource.";
    private int NuberOfResource;

    public Resource(int NuberOfResource) {
        this.NuberOfResource = NuberOfResource;
        System.out.println(s + " My number is: " + NuberOfResource);
    }

    @Override
    public void close() throws Exception {
        System.out.println("Closing...");
    }

    public void print(){
        System.out.println("Hello");
    }
Run Code Online (Sandbox Code Playgroud)

主要课程:

public class Main {

    public static void main(String[] args) {
        int a, b = 0;
        a = 5;

        try {
            Resource first = new Resurs(1);
            Resource second = new Resurs(2);
            System.out.println("I will …
Run Code Online (Sandbox Code Playgroud)

java exception autocloseable

1
推荐指数
1
解决办法
179
查看次数

是否有类似 AutoCloseable 的类不会抛出异常

是否有任何主要的 Java 库提供AutoCloseable类似的接口,其 close 方法不会抛出异常?我的关闭实现非常简单,我想避免捕获异常的样板

java autocloseable

0
推荐指数
1
解决办法
104
查看次数