2011-01-13 12 views
14

明示的に何も拡張していないクラスで、明示的にsuper()を呼び出す人がよく見られます。何も拡張していないクラスでsuper()を呼び出すことは悪い習慣ですか?

public class Foo 
{ 
    public Foo() 
    { 
    super(); 

    //do other constructor stuff 
    } 
} 

これは完全に正当なものであり、省略された場合、コンパイラによってコールが追加されますが、私はまだ悪い習慣と考えています。私はこれを見るたびに、プログラマーに継承の誤解があり、すべてのクラスが暗黙的にObjectに拡張されているのだろうかと思います。

これを私たちのコーディング標準/ベストプラクティスに追加する必要がありますか、私は彼らがそれを参照して私のチームで他のdevsをプルする必要がありますか?その個人的なバグは私のものですが、私がちょっと気まずいかどうかわかりません。

答えて

17

私は一貫性のためにすべての人ですが、私はスタイルのすべてのビットをマイクロマニュファクチャリングすることにも反対しています。コーディング規則の巨大なリストを持つことは、特にそれらのうちのいくつかが恣意的に見えるときに、人々がそれに従うことを嫌うものの一部です。コーディングガイドラインは、能力を向上させる最も貴重なプラクティスに合理化する必要があります。このプラクティスを強制することによって可読性、保守性、パフォーマンスなどがどれくらい改善されましたか?

私の個人的な練習は、私は、コーディングガイドラインに含めるか、他のプログラマのコードを検討中の欠陥、それを呼び出すということは十分にその深刻ではない、このような場合にsuper()を呼び出すためにないにですが。しかし、私はまだそれに言及して、より多くのエンジニアをロビーにしようとすると、コードのレビュー(欠陥ではなく、スタイルの問題というだけで)でそれについて話し合って、に電話してください。コールを使用してください。

+0

私はこの回答が気に入っています。コードレビューは、スタイルのポイントとしてこの問題に取り組むのに最適な場所だと思われ、プログラマが持つ可能性のある誤解を解消します。 – Qwerky

6

それは暗黙的ので一切呼ばなかっしまいます必要とされていないコードを追加するこの

+4

downvoterさんのコメントを待っています –

+3

私はそれを呼び出す必要があるかどうか尋ねていませんが、それは悪い習慣であるかどうか尋ねています。 – Qwerky

+1

+1 - 誰があなたを落としたのかわかりませんが、あなたの答えは正しいと思います。 –

8

を行う必要は必ずしも悪い習慣です。このコード行がなぜ追加されたのか、それが理由で実際に存在するのか不思議に思うようになると、コードを読みにくくすることができます。

3

それはつまり、指摘する必要がありますsuper()を呼び出す

  • は関係なく、クラスが何を継承するか、そうでなければ、完全に無意味ではありません。それは意味がある基本クラスの暗黙のコンストラクタを呼び出さない場合
  • 質問はである必要があります "何か完全に意味のない悪い練習をしていますか?。答えは明らかです - はい!
1

明示的なスーパーコンストラクターの呼び出しは、デフォルトで自動コードジェネレーターによって追加されることが多いため、プログラマーにとっては必ずしも悪いことではありません。疑いもなくばかげたコードをそのまま残すという悪い方法もあります。

Eclipseは特にこのスーパーコール(スーパークラスからコンストラクタを生成)を生成しますが、他のIDEでの経験はあまりありません。 (あなたのexperiencsをコメントに書いてください)私のもう一つのお気に入りのデフォルト生成コードは、インターフェイスのメソッド宣言です。完全に冗長なpublic abstractです。

0

super()コールは、JDeveloperによって暗黙的に追加されます。 あなた自身のクラスを書く間、これを行う必要性と有用性はありません。

+0

これは本当に質問に答えていないし、コメントとしてもっと適しています – dstarh

関連する問題