java throwable用法_Java为什么不允许Throwable的通用子类?

这是有关如何使用异常的简单示例:

class IntegerExceptionTest {

public static void main(String[] args) {

try {

throw new IntegerException(42);

} catch (IntegerException e) {

assert e.getValue() == 42;

}

}

}

TRy语句的主体引发具有给定值的异常,该异常由catch子句捕获。

相反,禁止对新异常进行以下定义,因为它会创建参数化类型:

class ParametricException extends Exception {  // compile-time error

private final T value;

public ParametricException(T value) { this.value = value; }

public T getValue() { return value; }

}

尝试编译以上内容会报告错误:

% javac ParametricException.java

ParametricException.java:1: a generic class may not extend

java.lang.Throwable

class ParametricException extends Exception {  // compile-time error

^

1 error

这种限制是明智的,因为几乎所有捕获此类异常的尝试都必须失败,因为该类型不可更改。可能有人会期望该异常的典型用法如下所示:

class ParametricExceptionTest {

public static void main(String[] args) {

try {

throw new ParametricException(42);

} catch (ParametricException e) {  // compile-time error

assert e.getValue()==42;

}

}

}

这是不允许的,因为catch子句中的类型不可更改。在撰写本文时,Sun编译器在这种情况下报告了一系列语法错误:

% javac ParametricExceptionTest.java

ParametricExceptionTest.java:5: expected

} catch (ParametricException e) {

^

ParametricExceptionTest.java:8: ')' expected

}

^

ParametricExceptionTest.java:9: '}' expected

}

^

3 errors

因为异常不能是参数化的,所以语法受到限制,因此必须将类型写为标识符,并且不带任何后续参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值