gpt4 book ai didi

Java反射构造函数命令

转载 作者:行者123 更新时间:2023-12-02 07:45:13 26 4
gpt4 key购买 nike

类构造的顺序是否会在反射中返回不同的结果?

我在使用反射时遇到问题。这是一个例子:

public class A{
public A()
{
do something here
}
public A(int i)
{
do something here
}
}

然后,在另一个类中,我使用反射通过 getConstructors() 方法获取构造函数。但问题就在这里。它仅返回带参数的构造函数。

所以我修改了代码并将构造函数的顺序更改为:

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() 之后显示构造函数。它仅显示一个构造函数......具有旧的排序,但显示两个具有新排序的构造函数。

最佳答案

如果你有

public class A{
private /* or non-public */ A()
{
do something here
}
public A(int i)
{
do something here
}
}

并且您使用 getConstructors,仅显示第二个。

如果您使用getDeclaredConstructors()你会得到所有的。我会尝试这个方法,看看是否能解决您的问题。

<小时/>

编辑:我会检查你没有

public class A {
public A A() // not a constructor
{
// do something
}
public void A() // not a constructor
{
// do something
}
}
<小时/>

你能删除nonConnection吗?如果为 false,则不会返回默认构造函数。

关于Java反射构造函数命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978845/

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