0

次のことを考慮してくださいJava interface

public interface Script<T> {
    public T execute(Map<String,Object> args); 
}

次に、

public interface SubScript<T> extends Script<T> {
    public T execute(String knownTypeArgument, Map<String,Object> args);
}

Hereは、Sub のメソッドknownTypeArgumentによって常に必要とされます。インターフェイスでは、メソッドexecuteは必要ありません。SubScriptpublic T execute(Map<String,Object> args);

私が持っている質問は、引数を1つまたは2つ追加するためだけにサブインターフェースを定義するのは標準的/正しい方法ですか?

SubScriptがまったく定義されておらず、knownTypeArgument渡された場合、実装で不適切なコードが発生しMap<String,Object> argsますか?

PS :execute(String knownTypeArgument, Map<String,Object> args);execute(Map<String,Object> args);の両方がまったく同じ目的を果たすはずです。状況executeによっては、より多くの情報が必要になるだけです。

PPS: stackoverflow のルールに従って、議論ではなく、私が見逃している事実/ポイントを探しています。

4

3 に答える 3

2

書いても

SubScriptインターフェイスでは、メソッドはpublic T execute(Map<String,Object> args);必要ありません。

execute(Map<String, Object) args)これは、 でなくなるという意味ではありませんSubScript。このインターフェイスには両方のメソッドがあります。名前は同じかもしれませんが、署名が異なるため、互いに干渉することはありません。

のすべての実装では、両方のSubScript方法を実装する必要があります。もちろん、これらのメソッドの 1 つが他のメソッドを呼び出すこともできますが、それは必須ではありません。

于 2013-03-08T09:28:09.923 に答える
1

あなたの場合、SubScriptを実装するクラスは両方を実装する必要があります

public T execute(Map<String,Object> args);

public T execute(String knownTypeArgument, Map<String,Object> args);

2つの別個のオーバーロードされたメソッドとして、上記はニーズに適したパターンではありません。

たぶん、引数なしのexecute()メソッドと、必要なパラメーターを設定するためのsetterメソッドを使用して、メソッドが実行するように設計されていることを実行するクラスを作成します。

于 2013-03-08T09:29:59.113 に答える
-1

インターフェイスは、特定の動作に必要なメソッドを定義するために使用する必要があるため、通常、ドラッグ可能またはカスタマイズ可能のように、「able」サフィックスで終わります。

新しいメソッド シグネチャを追加するためだけにセカンダリ インターフェイスを作成する場合は、メソッドのオーバーロードを使用することをお勧めします。Java では、名前が同じで引数のセットが異なる複数のメソッドを共存させることができます。両方のメソッドを同じクラス/インターフェースに簡単に配置して、必要に応じて呼び出すことができます。

于 2013-03-08T09:31:45.887 に答える