【问题标题】:try-with-resource not closing socket connectiontry-with-resource 不关闭套接字连接
【发布时间】:2018-05-28 05:36:20
【问题描述】:

我正在使用 Java 1.8,虽然 try-with-resource 在应用程序的其他部分工作正常,但在我这样编写的一个类中:

try(Socket sock = socket != null ? socket : new Socket()){ //Other implementation}

它说资源泄漏。有什么线索吗?

【问题讨论】:

  • 这是来自 IDE 编译器的消息(eclipse?)它有时会报告误报
  • 我从消息中了解到,如果套接字不为空且未分配的对象无法关闭,则有一个 Socket 无法初始化的选项。
  • 我的eclipse Oxygen.3a (4.7.3a) 不抱怨。
  • 将三元运算符移动到一个以socket为参数并执行此逻辑的函数中。这将避免编译器被这里的三元运算符混淆。
  • 另外,请将您的代码作为文本而不是图像放在您的问题中。

标签: java try-catch try-with-resources


【解决方案1】:

我从消息中了解到,如果套接字不为空且未分配的对象无法关闭,则套接字无法初始化的选项。

【讨论】:

  • @MạnhQuyếtNguyễn 由于很多原因,这太不合适了。例如:是什么让您认为海报不是女性?
  • 怎么可能不赋值?
  • @LonelyNeuron 我的错。 not assigned object cannot close. -> 这是在布尔表达式之后计算的
  • @MạnhQuyếtNguyễn 不要再这样做了
【解决方案2】:

您的代码原则上没有问题,因此可以忽略 Eclipse 给出的警告。

但是,如果你这样写,你的代码会更清晰:

if(null != socket){
    try(Socket sock =  new Socket()){

    }catch(Exception e){

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多