robbie70:
私は最近、いくつかのコードに出くわしたpublic static
メソッドが内部で定義されたabstract
クラス。私は、これは良い練習やアンチパターンとみなされているかどうかを疑問に思って?
私は私が何を意味するか説明するための簡単なプログラム例を作成しました。
public abstract class StaticMethodsInAbstractClassesStudy {
public static int adder(int a, int b){
return a + b;
}
}
public class StaticMethodsInClassesStudy {
public static void main(String [] args){
System.out.println(StaticMethodsInAbstractClassesStudy.adder(2, 3));
}
}
あなたがコードを実行すると、あなたは結果を得る5
私は、コード内で実行することができたことを証明しているabstract
クラスを。
私は意図的に添加さていませんでしたextends
しStaticMethodsInClassesStudy
、それは内部のコードを直接実行することは完全に可能だという点を強調するためにabstract
拡張クラスをインスタンス化せずにクラスを。
個人的に私はあなたが使用しているので、これは悪い習慣であると考えているだろうabstract
、通常のクラスとしてクラスをし、それによってバイパス意思のabstract
クラスを。方法のこれらの種類は、別の「通常」のJavaクラスなどのユーティリティクラスに保管すべきではありませんか?
JB Nizet:
これは、抽象クラスは実際にサブクラス化されることを意味しない場合を除き、それ自体は悪い習慣はありません、と抽象的インスタンス化を防ぐためにだけ存在しています。唯一の静的なユーティリティを提供するクラスのためのベストプラクティスは、それが最終的にするために、プライベートコンストラクタを持っているだろう。