所以,你从一开始就在使用 Java?还记得它被称为 “橡树” 的日子吗,那时面向对象仍然是一个热门话题,那时 C++ 的人认为 Java 没有机会,那时苹果仍然是一个东西?
我敢打赌,你至少不知道下面一半的事情。让我们从本周关于 Java 内部工作的一些巨大惊喜开始。
没错!JVM 不知道任何这样的事情,只有 Java 语言知道。
你想证明 JVM 不知道这样的事情吗?尝试以下代码:
3 // No throws clause here
4 public static void main(String[] args) {
5 doThrow(new SQLException());
8 static void doThrow(Exception e) {
9 Test.<RuntimeException> doThrow0(e);
12 @SuppressWarnings("unchecked")
13 static <E extends Exception>
14 void doThrow0(Exception e) throws E {
这不仅编译,而且实际上还抛出了 SQL Excption,您甚至不需要 Lombok 的 @Sneky Throws。
2 Object x() { return "abc"; }
3 String x() { return "123"; }
对啊。Java 语言不允许两个方法在同一个类中 “重写等效”,不管它们的潜在不同的抛出子句或返回类型如何。
你想要一个也可以序列化的 Runna ble,以防你想在其他地方执行它并通过网络发送。Lambdas 和序列化有点古怪。