[解決済み] 汎用インターフェース【終了
2022-03-17 12:17:31
質問
例えば、リモート・サービスの呼び出しを表すインタフェースを定義したいとします。リモートサービスの呼び出しは一般に何かを返しますが、入力パラメータを含むこともあります。実装クラスは通常1つのサービスメソッドのみを実装するとします。上記の情報を考えると、以下のような設計は良くないのでしょうか(どうもしっくりこない)。
public interface IExecutesService<A,B>
{
public A executeService();
public A executeService(B inputParameter);
}
さて、このインターフェイスを、入力パラメータを持つリモートサービスを実行するクラスで実装するとします。
public class ServiceA implements IExecutesService<String,String>
{
public String executeService()
{
//This service call should not be executed by this class
throw new IllegalStateException("This method should not be called for this class...blabla");
}
public String executeService(String inputParameter)
{
//execute some service
}
上記について、2点ほど質問があります。
-
汎用インターフェース(
IExecutesService<A,B>
) インターフェイスメソッドに対して異なる入力パラメータと戻り値の型を要求するサブクラスを提供したい場合、良いですか? -
上記のことをより良く行うにはどうしたらよいでしょうか?例えば、私は自分のサービスエグゼキュータを共通のインターフェース(
IExecutesService
しかし、実装クラスは通常どちらかのメソッドしか実装せず、IllegalStateExceptionの使用はとても醜いと感じます。また、B型パラメータはIExecutesService<A,B>
は、入力パラメータなしでサービスを呼び出す実装クラスにとっては冗長になります。また、2つの異なるサービス呼び出しのために2つの別々のインターフェイスを作成するのはやりすぎだと思います。
解決方法は?
ここで一つ提案です。
public interface Service<T,U> {
T executeService(U... args);
}
public class MyService implements Service<String, Integer> {
@Override
public String executeService(Integer... args) {
// do stuff
return null;
}
}
型消去のため、どのクラスもこれらのうちの1つしか実装できない。これにより、少なくとも冗長なメソッドを排除することができます。
提案されているインターフェースは無理があるものではありませんが、どんな付加価値があるのか100%ではありませんね。ただ、標準の
Callable
インターフェイスを使用します。これは引数をサポートしていませんが、インターフェースのその部分は最も価値がありません(イミフ)。
関連
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] C++でインターフェイスを宣言するには?
-
[解決済み] インターフェースとベースクラス
-
[解決済み] コンストラクタのシグネチャを定義するインターフェース?
-
[解決済み] なぜJava 8のOptionalは引数で使ってはいけないのか
-
[解決済み] Java 8のインターフェイスメソッドで "final "が使えないのはなぜですか?
-
[解決済み】「インターフェースに合わせたプログラム」とはどういう意味ですか?
-
[解決済み】インターフェイスメソッドの最終引数 - ポイントは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
javaで非静的な解を静的な参照にすることができない
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。