在java中实现AutoCloseable很重要吗?
如果我创建一个实现AutoCloseable的类,扩展另一个没有实现它的类,这有意义吗?
e.g
public class IGetClosed extends ICannotBeClosed implements AutoCloseable {...}发布于 2016-06-29 19:10:30
在java中实现autoCloseable很重要吗?
很难说它是重要的还是不重要的实现接口。但这并不是必需的。
如果我创建一个实现AutoCloseable的类,它扩展了另一个没有实现它的类,这有意义吗?
这样做没问题。没什么不对的。
AutoCloseable是从Java 7中添加的。它被设计为与新的尝试资源语句(Java 7+)一起使用。
请参见下面两个提供相同功能的类。一种是不使用AutoCloseable,另一种是使用AutoClosable:
// Not use AutoClosable
public class CloseableImpl {
public void doSomething() throws Exception { // ... }
public void close() throws Exception { // ...}
public static void main(String[] args) {
CloseableImpl impl = new CloseableImpl();
try {
impl.doSomething();
} catch (Exception e) {
// ex from doSomething
} finally {
try { // impl.close() must be called explicitly
impl.close();
} catch (Exception e) { }
}
}
}
// Use AutoCloseable
public class AutoCloseableImpl implements AutoCloseable {
public void doSomething() throws Exception { // ... }
public void close() throws Exception { // ...}
public static void main(String[] args) {
// impl.close() will be called implicitly
try (AutoCloseableImpl impl = new AutoCloseableImpl()) {
impl.doSomething();
} catch (Exception e) {
// ex from doSomething or close
}
}
}如你所见。使用AutoClosble将使代码更简洁、更简洁。
发布于 2016-06-29 19:02:45
AutoCloseable是一个接口,在使用它时可以自动关闭对象的资源。如果您没有计划使用您的对象与资源的尝试,就根本没有必要实现它。
作为继承的一条规则,不,做你想做的事情并没有本质上的错误。如果您想要自动关闭您的子类中的资源,请继续。
发布于 2016-06-29 19:04:04
让一个类实现AutoClosable是没有问题的,即使它是超类,实际上,由于Java中的所有类都直接或间接地扩展了java.lang.Object,所以所有的AutoClosable最终都扩展了一个不实现这个接口的类。
如果您的类有一些close的语义,那么您可能应该让它实现AutoClosable。这样做几乎不需要花费任何费用,如果有的话,它允许您使用Java 7简洁的语法和资源的尝试语法。
https://stackoverflow.com/questions/38108010
复制相似问题