1

LocalVariableTableParameterNameDiscoverer の JavaDoc でhttp://static.springsource.org/spring/docs/2.0.x/api/org/springframework/core/LocalVariableTableParameterNameDiscoverer.html

以下の行が言及されています:

メソッド属性の LocalVariableTable 情報を使用してパラメーター名を検出する ParameterNameDiscover の実装。クラス ファイルがデバッグ情報なしでコンパイルされた場合は null を返します。

デバッグ情報なしでコンパイルした意味がわかりませんでした。

これについて何か考えがある人がいたら説明してください。

4

2 に答える 2

1

デバッグを可能にするために、ほとんどのコンパイラにはデバッガに適したフラグがあります。フラグが設定されている場合、コードを並べ替える最適化は行われず、生成された実行可能ファイルには、マシンコードを生成元のソース行にリンクするための情報が含まれています。一方、コンパイラは、プログラムを少し高速化するために、これらすべてが削除された、デバッグに適さない実行可能ファイルを作成するように作成できます。

あなたが言及したクラスは、名前のクラスファイルからパラメータ名を取得できません。スペースを節約するために、名前がコンパイラによって削除されました。

于 2012-06-14T14:06:36.237 に答える
0

スペースを節約するために、Java コンパイラはメソッド パラメータ名などを書き出すことを回避します。これを参照してください。ただし、ParameterNameDiscoverが機能するには、メソッド パラメーター情報を .class ファイルに出力する必要があります。これは、 Java 8 の前に-debugオプションを使用してコードをコンパイルするか、Java 8 の-parameterオプションを使用してコードをコンパイルすることで実現できます。メソッド パラメーターの詳細については、 .class ファイルでは、このスタックオーバーの質問を参照してください。

于 2015-02-07T19:36:57.163 に答える