次の 2 行を検討してください。
return loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", "")).getClass();
return (Class<?>) loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", ""));
最初の行を使用してアプリケーションを実行すると、期待どおりに動作しません。2 行目を使用してアプリケーションを実行すると、期待どおりに動作します。私の要点は、2 つの行の間の動作が異なるということです。なぜ彼らは異なる振る舞いをするのですか?getClass() はクラスを返し、型キャストはオブジェクトをクラスにキャストします。したがって、最終結果は同じになるはずです。ただし、2 つの動作は異なります。