类构造的顺序是否在反射中返回不同的结果?
我在使用反射时遇到问题。这是一个例子:
public class A{
public A()
{
do something here
}
public A(int i)
{
do something here
}
}
然后,在另一个类中,我使用反射通过 getConstructors() 方法获取构造函数。但问题就在这里。它只返回带参数的构造函数。
所以我修改了代码并将constructos的顺序更改为:
public class A{
public A(int i)
{
do something here
}
public A()
{
do something here
}
}
然后,它正确返回了两个构造函数。
另一个有趣的点是 OpenJDK 在两个示例中都能正常工作,但 Sun JDK 却不行。我有很多这样的类,SunJDK 在其中一些工作得很好,而在另一些则错了。很奇怪。
任何原因?
编辑:这是一个大项目,这里是一些反射代码
Constructor<?>[] constructors = handlerClass.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
Class<?>[] parameterTypes = constructor.getParameterTypes();
System.out.println("-" + constructor.toString());
if (nonConnection == true && parameterTypes.length == 0) {
return constructor;
} else if (parameterTypes.length > 1) {
continue;
} else if (parameterTypes.length == 1) {
Class<?> parameterType = parameterTypes[0];
if (TableManipulator.class.isAssignableFrom(parameterType))
{
return constructor;
}
}
}
handlerClass 是从中获取构造函数的类。
附言。我看了一下字节码,除了构造函数的顺序之外,字节码是相同的。
编辑:我在 getParameterTypes() 之后添加了一个 System.out 来显示构造函数。它只显示了一个具有旧顺序的构造函数....,但显示了两个具有新顺序的构造函数。