クラス構造の順序は、リフレクションで異なる結果を返しますか?
リフレクションの使用に問題があります。次に例を示します。
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
}
}
次に、2 つのコンストラクターを正しく返します。
もう 1 つの興味深い点は、OpenJDK は 2 つの例で問題なく動作しますが、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。バイトコードを見てみましたが、バイトコードはコンストラクターの順序を除いて同じです。
編集: getParameterTypes() の後にコンストラクターを表示する System.out を追加しました。コンストラクターは 1 つだけ表示されます....古い順序で表示されますが、新しい順序でコンストラクターが 2 つ表示されます。