Does Java have a using statement?

前端 未结 12 1996
梦谈多话
梦谈多话 2020-11-28 16:13

Does Java have a using statement that can be used when opening a session in hibernate?

In C# it is something like:

using (var session = new Session()         


        
12条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-28 17:07

    If you're interested in resource management, Project Lombok offers the @Cleanup annotation. Taken directly from their site:

    You can use @Cleanup to ensure a given resource is automatically cleaned up before the code execution path exits your current scope. You do this by annotating any local variable declaration with the @Cleanup annotation like so:

    @Cleanup InputStream in = new FileInputStream("some/file");

    As a result, at the end of the scope you're in, in.close() is called. This call is guaranteed to run by way of a try/finally construct. Look at the example below to see how this works.

    If the type of object you'd like to cleanup does not have a close() method, but some other no-argument method, you can specify the name of this method like so:

    @Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0);

    By default, the cleanup method is presumed to be close(). A cleanup method that takes argument cannot be called via @Cleanup.

    Vanilla Java

    import java.io.*;
    
    public class CleanupExample {
      public static void main(String[] args) throws IOException {
        InputStream in = new FileInputStream(args[0]);
        try {
          OutputStream out = new FileOutputStream(args[1]);
          try {
            byte[] b = new byte[10000];
            while (true) {
              int r = in.read(b);
              if (r == -1) break;
              out.write(b, 0, r);
            }
          } finally {
            out.close();
          }
        } finally {
          in.close();
        }
      }
    }
    

    With Lombok

    import lombok.Cleanup;
    import java.io.*;
    
    public class CleanupExample {
      public static void main(String[] args) throws IOException {
        @Cleanup InputStream in = new FileInputStream(args[0]);
        @Cleanup OutputStream out = new FileOutputStream(args[1]);
        byte[] b = new byte[10000];
        while (true) {
          int r = in.read(b);
          if (r == -1) break;
          out.write(b, 0, r);
        }
      }
    }
    

提交回复
热议问题