2011-09-09 42 views
-1

私はクラスAouterを持って、このAouterクラスは、2つの内部クラスすなわちBinner、Cinnerを持っています。 Binnerクラスが変更されたので、Cinnerクラスもコンパイルしてサーバーに移動する必要がありますか?他の内部クラスを変更した場合、内部クラスをコンパイルする必要はありますか?

plz私の質問に疑問がある場合は、私に尋ねてください。

ありがとうございます。

+0

これは、おそらくコンパイラやビルドシステムによって異なります。一般的には、ソースファイルのどの部分が変更されているかを知るのに十分スマートではなく、変更された部分だけです。私はあなたがツールがこれを処理して、彼らが吐き出したものをアップロードすると思います。 'Cinner'は(おそらく)再コンパイルされているにもかかわらず変更されていません。コンパイラは、相互作用があれば 'Cinner'に影響する最適化を行っているかもしれません。一般的に、私は 'Cinner'が変更されていないと仮定することは安全ではないと思うでしょう。 –

+0

http://stackoverflow.com/faq#howtoask –

答えて

1

Cinnerは、決してBinnerに依存しないため、再コンパイルする必要はありません。それ以外の場合は、再コンパイルしたほうが良いと思います(必ずしも必要ではないかもしれませんが、安全面にいる方が良いです)。しかし、一般的に内部クラスはそのクラスを含むクラスと共にコンパイルされるため、実際にはすべてのクラスが再コンパイルされます。

1

私はそれらを別々にコンパイルすることはできませんが、1つの内部クラスは別の内部クラスへの変更の影響を受けてはならないと思います。別の.classファイルを生成するので、バイナリをデプロイするためにrsyncのようなツールを使用しないでください(つまりはサーバに移動します)。そうすれば、変更のみが転送される必要があります。

+0

rsyncは自動ファイル転送ツールですか?私は他の人が同じサーバーで作業できる自動ツールbzeを使用することはできません。 – Silambarasan

+0

※自動ではありません。むしろ実際に変更されたファイルだけを移動するスマートなコピー/アーカイブ/同期ツールです。 – dcn

0

内部クラスが外部クラスを使用する場合は、変更を加えることができます。これは、内部クラスが外部クラスのプライベートメンバーにアクセスするときにコンパイラーがアクセスメソッドを生成する必要があるためです。これは、フィールド/メソッド/コンストラクタを非プライベートからプライベートに変更する場合よりも、内部クラスがフィールドアクセスからバイトコードのメソッド呼び出しに変更されることを意味します。

関連する問題