|
||||||||||||||||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||||||||||||||||
| クラス | ||||||||||||||||||||||||||
|
クラスを明確に書くことは可読性をあげるのみではありません。パフォーマンスにも左右し、再利用もしやすくなります。ここでは2つの規約をあげますので、参考にしてコードを作成してみてください。 |
||||||||||||||||||||||||||
| 継承させたくないクラスはfinal宣言する(C_CLS001) | ||||||||||||||||||||||||||
|
継承させたくないクラスを宣言する際には、次のようにfinal宣言をするといくつかのメリットがあります。 |
||||||||||||||||||||||||||
public final class Sample{
|
||||||||||||||||||||||||||
|
まず、継承が行われないことが明確になるためコードの可読性の向上に繋がります。次に、クラスの継承およびメソッドのオーバーライドがないことがコンパイラに通知されるため、コードの最適化がより適切に行われます。そして、パスワード管理クラスなどのセキュリティに関わるクラスをfinalとすることで、予期しない継承によりセキュリティホールができる危険性を抑えることができます。 逆に、利用してもメリットがほとんどないケースもあります。皆さんはJavaの文献や記事を読んでいて、「finalとすることでパフォーマンスの向上が見込める」という記述を目にしたことはないでしょうか。 これはfinalを宣言することにより、コンパイラによるインライン化(注)が促進され、コードが最適化されてパフォーマンスが向上するという考えに基づくものなのですが、JVMが進化した現在ではパフォーマンス的なメリットはほとんどありません。
※注:
インライン化とは最適化の一種で、メソッドの呼び出しをメソッド本体と置き換えてしまうことです。それによりメソッドの呼び出しにかかるオーバーヘッドをなくすことができます。
finalは既存のコードの再利用性や拡張性を制限するので、パフォーマンスのためにfinalをいたるところで使うと、オブジェクト指向的な設計を妨害してしまい品質の低下をまねきます。よって、設計上制限をかける必要がある場合や設計がわかりやすくなる場合に使うべきです。 |
||||||||||||||||||||||||||
| フィールドを宣言する順序はpublic(+)、protected(#)、デフォルト(~)、private(-) の順(C_CLS003) | ||||||||||||||||||||||||||
|
フィールド宣言の順番でpublicを一番上に持ってきているのは、コードを見る際にpublicフィールドに注目することが多いからという理由です。 これは必ずしも守るべき規約ではなく、可読性の低下に繋がらないような書き方であれば特に問題はありません。意味合いでまとめる方法や型でまとめるといった方法も考えられます。ただし書き方を決定したらプロジェクト内で統一すべきです。不規則に混ぜて書くのは避けるようにしてください。 なお、クラス変数については一番上に書くのが一般的です。 |
||||||||||||||||||||||||||
| コンストラクタ | ||||||||||||||||||||||||||
|
コンストラクタを用いる場合には、あらかじめ権限や原則をしっかり決めておく必要があります。そうでないと、コンストラクタを用いても意味がなかったり、可読性を低下させたりすることになります。 |
||||||||||||||||||||||||||
| public宣言していないクラスにはpublic権限のコンストラクタを作らない(C_CRT001) | ||||||||||||||||||||||||||
|
publicで宣言されていないクラスのコンストラクタにはどこからでもアクセスできるわけではないので、無意味な修飾子となってしまいます。コンストラクタのpublic修飾子を除去するか、クラスにpublic修飾子がつけられるよう設計を見直してください。 |
||||||||||||||||||||||||||
| デフォルトコンストラクタは原則作成する(C_CRT002) | ||||||||||||||||||||||||||
|
まず、デフォルトコンストラクタとは引数のないコンストラクタのことで、具体的には次のようなものです。 |
||||||||||||||||||||||||||
public class Sample{
|
||||||||||||||||||||||||||
この例ではデフォルトコンストラクタ中で初期化などを一切行っていませんので、一見意味のない実装に見えます。しかし引数のあるコンストラクタがあるときでもデフォルトコンストラクタを明確に実装することで次のことが可能になります。
|
||||||||||||||||||||||||||
| 例外として、引数ありのコンストラクタでインスタンス生成を前提としている場合は、デフォルトコンストラクタを作成する必要はありません。 |
||||||||||||||||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||

