Java 中的 RAII 设计模式
来自C++背景,我是RAII模式的忠实粉丝。我已经广泛使用它来处理内存管理和锁定管理以及其他用例。
在Java 1.7中,我看到我可以使用try-with-resources模式来创建RAII模式。
我使用RAII创建了一个示例应用程序,它可以正常工作,但是我看到来自java的编译器警告。
示例应用程序
try(MyResource myVar = new MyResource(..))
{
//I am not using myVar here
}
我收到以下错误
warning: [try] auto-closeable resource node is never referenced in body of corresponding try statement
我理解警告,它暗示我应该在try块中使用变量,我并不需要一直这样做。
考虑到这一点,我假设Java并没有真正支持RAII,我可能滥用了仅用于资源管理的功能,而不是C++中的RAII等效物。
几个问题:
- 我的理解是否正确?
- 忽略这些警告的风险有多大?
- 如何通过蚂蚁忽略这些警告?
- 有没有一个简单的方法来克服这个问题?
对于4,我正在考虑将构造函数调用拆分为更简单的构造函数和这样的实例方法
try(MyResource myVar = new Resource())
{
myvar.Initialize()
....
}
它解决了编译器问题,但从RAII设计中汲取了本质。