在Java思考中: 合成 和 隐式 参数有什么区别?
我已经遍历了以下Oracle教程:https://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html#implcit_and_synthetic,这给我区分合成参数和隐式参数带来了困惑
每当显式创建 参数时,它就是隐式,不是吗?如果是这样,考虑将 synthetic 参数作为隐式的子集(与上面的教程相对应不是正确的)是公平的吗?
答案 0 :(得分:2)
每当显式创建了参数 时,它就是隐式,不是吗?
否。
将合成参数视为隐式的子集是否公平?
否。
隐式方法和参数未在源代码中指定。它们是由编译器生成的,因为JLS(Java语言规范)要求这样做。 Oracle文档提到了默认的no arg构造函数,该构造函数是为没有显式构造函数(即源代码中定义的一个)的类生成的。另一个示例是使用一个参数(对外部实例的引用)生成的嵌套非静态类的默认构造函数。这就是嵌套类访问外部类的所有变量和方法的方式。
像隐式,合成方法和参数一样,未在源代码中指定。但是,这些未在JLS中指定。它们是特定于编译器的。不同的编译器可能会产生不同的合成方法和参数。