类构造函数的顺序是否在反射中返回不同的结果?Java反射构造函数的订单
我有使用反射的问题。下面是一个例子:
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是从中获取构造函数的类。
ps。我查看了字节码,除了构造函数的顺序外,其他字节码都是一样的。
编辑: 我添加了一个System.out来显示getParameterTypes()之后的构造函数。它只显示一个构造函数....与旧的排序,但两个构造函数与新的排序。
请提供您正在使用的代码,通过反射来获取构造函数。 –
你确定吗? 'getConstructors'应该返回类的所有构造函数。 'getDeclaredConstructors'做了一些不同的事情。如果两者都表现出非确定性行为,我会很惊讶。 –
我刚刚测试过,它的工作方式与sun jdk 1.6.0_20一样。 – dacwe