gpt4 book ai didi

java - 为什么在调用静态方法时用括号包裹类型是非法的?

转载 作者:行者123 更新时间:2023-11-30 07:05:34 24 4
gpt4 key购买 nike

这个问题是出于好奇,不是实际问题。有人可以解释为什么以下代码会导致编译时错误吗?

public class Test {
public static void main(String... args) {
(Long).parseLong("1"); // won't compile
}
}

错误:

Test.java:3: error: illegal start of type
(Long).parseLong("1");
^
1 error

对于一个实例来说,使用括号是合法的(尽管这里也没有必要):

public class Test {
public static void main(String... args) {
Long aLong = 1L;
(aLong).parseLong("1");
}
}

这当然也是合法的:

public class Test {
public static void main(String... args) {
Long.parseLong("1");
}
}

最佳答案

通常在 Java 等语言中,表达式可以自由地放在括号中并保持相同的表达式。但并非一切都是表达。一个(裸)类型名是不是表达式的东西之一。它可以是多种表达式的一部分 - 但单独使用时,它并不是一个完整的表达式。

由于这个事实,正如评论中所说,解析器尝试将带括号的类型名解析为强制转换表达式的一部分(具体来说,“类型”部分 (Long) ).但是,您的其余代码无法解析为有效的强制转换表达式(因为它必须后跟一个有效的表达式,该表达式将产生强制转换的对象 - 您没有,因为 .parseLong("1 ") 不是一个有效的表达式),所以整个事情都被拒绝了。

关于java - 为什么在调用静态方法时用括号包裹类型是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com