【问题标题】:Any other use of vertical bar for types? [duplicate]垂直条的任何其他用途类型? [复制]
【发布时间】:2012-10-12 20:25:54
【问题描述】:

可能重复:
In a Java 7 multicatch block what is the type of the caught exception?

在 Java SE 7 中可以捕获多种类型的异常:

catch (IOException|SQLException ex) {
   logger.log(ex);
   throw ex;
}

这种语法还有其他用法吗?

我可以用这种语法创建联合吗,比如

public void main() {
    Integer|Boolean a;
    a=true;
    a=Integer.Zero;
}

或者我可以使用它来匿名派生多个接口,例如

public void main() {

    Object o = new List<Integer>|Comparable<List<Integer>>() {
        // here implementing both interfaces...
    }

}

【问题讨论】:

  • 不,除了一次捕获多个异常之外,你什么也做不了。
  • @JB 为什么?他们要多久才能完成? :)
  • 因为第一个将 Java 转换为松散类型的语言(这永远不会发生),而第二个尚未考虑,甚至没有提交给项目代币。如果您希望这样的事情发生,请提交 RFE,但恕我直言,这会使语言更加臃肿而没有任何显着优势。
  • 没有松散的类型。最具体的共同祖先,就像例外一样。
  • 然后直接将变量声明为Object

标签: java oop interface java-7 unions


【解决方案1】:

类型是 IOException 和 SQLException 的最小上限,Exception,但如果重新抛出异常,请确保检查的异常列表是 IOException 和 SQLException,而不是 Exception。

有关更精确的详细信息,请参阅 Java 语言规范的第 14.20 节 - http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20

除了选择三元运算符的类型之外,Java 的其他地方并没有类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 2023-04-09
    • 2014-01-01
    • 2013-05-01
    • 2017-02-12
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多