- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
给定这段代码:
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)构造函数而不是第二个。
最佳答案
Builder
是 Hello
的静态嵌套类,因此它应该能够访问 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/
如果构造函数的参数是二维字符串列表,如何将参数传递给 getdeclaredconstructor 方法?如果参数是 String 我可以使用 String.class。但是二维字符串列表应该是什么?
我正在寻找这样的构造函数: type.getDeclaredConstructor(Integer.class); 当类型为 MyType { public MyType(Integer a); }
对于我们应用程序的一次安装,我们一直在生产中看到用户报告为“系统变慢”或“请求永不返回”的问题。最后不得不重启服务器。我们遇到了几起这样的事件,每晚重启服务器似乎是一种解决方法。 我们的应用程序大量使
我有一个界面 public interface IDrawing 接下来我有一个实现此接口(interface)的类: public class Line implements IDrawing 现在
给定的是一个类A。类 A 的构造函数采用单个类 B 作为参数,即: A(B.class) 是否可以通过 A.class.getDeclaredConstructor(...) 获取 A 的构造函数方法
我正在使用 java web 框架 (Vraptor),但遇到以下问题:该框架使用反射来实例化 Controller 参数,并且由于某种原因,其中一个参数正在返回 . 我的问题是:框架正常工作了一段
在此处查看此方法的文档:getDeclaredConstructor() 我看不到它仅返回公共(public)构造函数的任何引用。 我的问题是我有以下代码: protected BaseClass i
给定这段代码: import java.util.Arrays; public class Sample { private final int test; private Sampl
在我的程序中,我将 JComponent 类注册到我的类中,为我的目的处理它们(将它们的值转换为设置条目)。它看起来像这样: InputHandlers.register(InputJTextFie
我有带有 String[] 构造函数的类(没有默认构造函数): 我需要按名称动态构造一个实例: package tests; import java.lang.reflect.Constructor;
我正在尝试使用 glassfish server 3.1 在 netbeans 7.2.1 中调试 Web 应用程序。之前调试工作正常。 但 Netbeans 调试器突然开始打印此消息: Thread
我注意到在 Java 反射 API 中有两种不同的方法来调用构造函数:getDeclaredConstructors/getConstructors 方法。尽管 Java 文档略有不同(getDecl
我是一名优秀的程序员,十分优秀!