Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Controls {
- type CloseableResource = { def close() }
- /**
- * Equivalent of C# using keyword. Automatically closes any resource which has a close method.
- * Capable of returning a value
- * @param T resource which has a close() method
- * @param M result
- */
- def using[ T <: CloseableResource, M ](resource: T)(block: T => M ): M = {
- require( resource != null, "non-null resource is required" )
- try {
- block(resource)
- } finally {
- closeResource(resource)
- }
- }
- /**
- * Multiple resource version
- */
- def using[T <: CloseableResource, M](resources: T*)(block: Seq[T] => M): M = {
- try {
- block(resources)
- } finally {
- resources.foreach(closeResource)
- }
- }
- /**
- * Mutes closing exceptions
- */
- private[this] def closeResource[ T <: CloseableResource ] ( resource: T ): Unit = {
- try {
- resource.close
- } catch {
- case e => e.printStackTrace
- }
- }
- }
Add Comment
Please, Sign In to add comment