0

次の 2 行を検討してください。

return loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", "")).getClass();

return (Class<?>) loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", ""));

最初の行を使用してアプリケーションを実行すると、期待どおりに動作しません。2 行目を使用してアプリケーションを実行すると、期待どおりに動作します。私の要点は、2 つの行の間の動作が異なるということです。なぜ彼らは異なる振る舞いをするのですか?getClass() はクラスを返し、型キャストはオブジェクトをクラスにキャストします。したがって、最終結果は同じになるはずです。ただし、2 つの動作は異なります。

4

1 に答える 1

5

あなたの loadMethod はすでに Class 型のオブジェクトを返しているようです。getClass()そのため、それを呼び出すと、java.lang.Class.classロードしたものではなく、返されます。ロードしたものをキャストしても、ファイル名の Class インスタンスである基になるオブジェクトは変更されません。

つまり、整数型のクラス オブジェクトを返す場合は、次のようにします。

return Integer.class;

あなたの最初の行はやっています

return Integer.class.getClass();

そのため、Type Integer ではなく、Type クラス自体を表す Class オブジェクトを取得します。

于 2012-11-04T07:54:37.147 に答える