【发布时间】:2023-04-05 12:01:01
【问题描述】:
我正在尝试将我的应用程序的一个大型且经常使用的部分重新分解为单独的方法,以使其更易于维护。
其中一些方法要求用户输入并进行输入验证,所以我使用了 Scanner 和 System.in 但是当我关闭我的扫描仪时,我也会关闭 System.in
所以我的问题是,我只能通过使用 CloseShieldInputStream 屏蔽 System.in 来防止它被关闭,还是应该开始将 Scanner 传递给方法?
【问题讨论】:
-
请贴一些代码...
-
您真的需要关闭扫描仪吗?我建议让垃圾收集器处理它 - 如果不关闭底层对象,就无法关闭它。
-
我的方法声明了一个 Scanner,读取并返回 nextLine(),关闭 Scanner,下次运行时让我头疼。如果我不关闭它,Eclipse 会纠缠我潜在的资源泄漏,忽略它是否安全?
-
Eclipse 在这种情况下是完全错误的——或者更确切地说,它过于谨慎了。关闭 Scanner 除了关闭底层 InputStream 之外没有任何用处,所以如果您不想关闭
System.in,请不要在 Scanner 上调用close()。
标签: java java.util.scanner system.in