gpt4 book ai didi

java - getDeclaredConstructors() 列出了 2 个构造函数,但只有一个

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:54 24 4
gpt4 key购买 nike

给定这段代码:

import java.util.Arrays;

public class Sample {
private final int test;

private Sample(int test) {
this.test = test;
}

public static void main(String[] args) {
System.out.println(Arrays.toString(Hello.class.getDeclaredConstructors()));
}

public static class Hello {
private final int i;

private Hello(int i) {
this.i = i;
}

public int getI() {
return i;
}

public static class Builder {
private int i;

private Builder() {

}

public static Builder builder() {
return new Builder();
}

public void add(int i) {
this.i = i;
}

public Hello build() {
return new Hello(i);
}
}
}
}

我不明白显示的输出:

[private Sample$Hello(int), Sample$Hello(int,Sample$1)]

这里列出的第二个构造函数是什么,它带有 Builder 的第二个参数。我认为输出只会显示 Hello 的私有(private)构造函数而不是第二个。

最佳答案

BuilderHello 的静态嵌套类,因此它应该能够访问 private 构造函数 Sample$Hello(int )

但是,JVM 对嵌套类没有任何特殊支持,因此,从 JVM 的角度来看,Builder 无法访问 Sample$Hello(int)

为了解决这个问题,编译器生成具有默认可见性的合成构造函数Sample$Hello(int,Sample$1),并调用它而不是Sample$Hello(int) 来自 Builder

Sample$1 是编译器生成的一个空类,用于为Sample$Hello(int,Sample$1) 做区分签名。实际上,此构造函数的第二个参数始终为 null

关于java - getDeclaredConstructors() 列出了 2 个构造函数,但只有一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295638/

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