2012-02-14 7 views
2

Fooというクラスがあるとします。このクラスは多くの人によって変更され、コンソールに情報を出力します。この効果を得るには、次の方法があります。クラスがjavaでメソッドを使用しないようにすることはできますか?

private void print(String message){ ... } 

私たちが望む形式で画面に印刷します。他の開発者からのコードを見直しながら

はしかし、私は彼らが常にかろうじて可読プリントアウトして、その結果、代わりにSystem.out.println(...)
を呼び出すことがわかります。

私の質問は次のとおりです:Foo.javaのSystem.out.println()の使用をすべて禁止することは可能ですか?もしそうなら、どうですか?

私はこれを調べようとしましたが、私が見つけたのは相続に関連していました。私の質問には関係ありません。

ありがとうございます!
N.S.

EDIT:私は、メソッドの使用を防ぐために何かを行う必要があることを知っていますが、私たちはポリシーとして、決して//IMPORTANTというコードを削除しないでください。

EDIT2:デベロッパーにそれをしないよう伝えることができますし、コードのレビューを使用して「エラー」をフィルタリングすることもできますが、1)私はすでにそれをやっており、多くの時間を要します。これが可能かどうか、私の開発者に対処する方法ではありませんかどうかです。

+7

コードではなくプロセス/通信でこれを実装するのはどうでしょうか? devsに "sysoutを使わないでください"と伝えてください。 –

+1

はプログラマーに、もしあなたが給料を切ってもらうよう指示します。 – vulkanino

+0

コンソールに直接印刷するのではなく、 'log4j'のようなロギングライブラリを使用してください。何がどこに記録されるのかを設定します。彼らが切り替えるまで、ますます重くなっている開発者を打つ。 – millimoose

答えて

3

trueの場合は、Javaファイルのいくつかのサブセットに基づいて例を取るためにその例を変更することが可能と拒否しなければならないが、開発者はのSystem.outを直接好ましいであろう使用してはならないことを伝えます、 System.outを別のPrintStreamに設定し、プライベートメソッドで代替PrintStreamを使用することができます。そうすれば、人々はSystem.out.printlnを使用して何も出力しませんが、代替PrintStreamを使用することができます。http://halyph.blogspot.com/2011/07/how-to-disable-systemout.html

+0

これは私がやることです。情報をありがとう! (私がそうするとすぐにこの回答を受け入れるでしょう) –

6

publicのメソッドは、それだけで公開されています。アクセスを制限する方法はありません。

この種の問題は、通常、PMDやcheckstyleのようなコードチェッカーを設定し、それらを継続的な統合ビルドに統合することで "解決"されます。

+0

はい、いくつかのcheckstyleルールは正常であるはずです。結局のところ、静的解析ツールがそこにあるのです。 – Voo

2

リビジョンコントロールシステム(SVN、Git、Mercurial)のプリコミットフックは、System.{err,out}の用途でgrepを使用し、それらが発生した場合にコミットを防止することができます。

http://stuporglue.org/svn-pre-commit-hook-which-can-syntax-check-all-files/は、SVNのファイル拡張子に基づいて異なる変更されたファイルに対してアクションをとる例です。次のようなものが

egrep -q '\bSystem\.(err|out)\b' 
1

いいえ、100にすることはできません%クラスがJavaで特定のメソッドを使用するのを防ぐ。そうは言っ持つ

...

私の提案は、ビルドプロセスにコード分析を追加し、System.out.printlnのいずれかの発生にビルドに失敗するだろう。このルートに行くことに興味があるなら、始めるには良い場所はPMDです。

また、あなたの開発者と建設的な話し合いをして、彼らが何をしているのかについて話してください。がんばろう。

2

System.outコールを出力を無視するストリームにリダイレクトすることも、ログ出力システムにリダイレクトすることもできます。

System.setOut(printStream); 

System.out.printlnを使用しているものを運用環境で強制終了することもできます。

1

SystemOutputStreamを独自の実装に置き換えて、例外をスローするか、独自のprint実装への呼び出しをリダイレクトすることができます(公開する必要があります)。

関連する問題