定数だけ定義されたインターフェイスではなく、インターフェイス内に定数は定義すべきではないのでしょうか?
インターフェイス内に定数を定義すると、SonarQubeで指摘されてしまいます。
直訳だと「"Effective Java"によると定数インターフェースパターンは、インターフェースの貧弱な使用です。」と表示されます。
ある計算を行うクラスと、そのインターフェイスがあります。
この計算クラスは、正しく計算結果を返すこともあれば、無効値を返すこともあります。
使用する側はDI注入により、インターフェイスから計算メソッドを呼び出します。
無効値を定数としてどこかに定義する必要があるのですが、インターフェイス内に定義するとSonarQubeで指摘されてしまのでenumや定数クラスを別途用意しなければなりません。
しかし、そのように修正すると、インターフェイスを使用する側は定数クラスをいちいちインポートして使用しなけれなりません。
計算クラスを使用する側はインターフェイスさえ知っていればよい状態にしたいのですが、不可能でしょうか?
もしくはそのような実装は推奨されないのでしょうか?
java
1interface ICalculator{ 2 int INVALID_VALUE = -999; //Effective Javaに準拠していないと言われ怒られる 3 int calculate(); 4} 5 6class Calculator implements ICalculator { 7 @Override 8 int calculate() { 9 //計算結果を返す。無効値を返すこともある。 10 } 11} 12 13class Main { 14 //使用する側 15 16 //DI注入によりICalculatorの実体が渡ってくる 17 private final ICalculator calculator; 18 19 void main() { 20 int result = this.calculator.calculate(); 21 //resultに無効値が返ってくることもあるので、無効値の定数をどこかに定義したい。 22 //インターフェイスに定義すると怒られる。たかが1個の定数を定義するためにenumや定数クラスを作りたくない。 23 //実体クラス側に定数を定義すると、DI注入の意味がないし、ICalculatorの実体クラスが増える度に定数を定義しなければならない。 24 } 25}
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。