インターフェイスを実装する一連のユーティリティクラスを作成したいと思います。これを行うために、私はシングルトンパターンを使用します。しかし、これらのユーティリティクラスを静的メソッド呼び出しで使用することもできれば便利です。例えば:スタティックインターフェイスのマッチングによるJavaユーティリティのシングルトン
public interface IValidator<T> {
boolean isValid(T value);
}
public class StringValidator implements IValidator<String> {
public static final StringValidator instance = new StringValidator();
@Override
public boolean isValid(final String value) {
return true;
}
}
上記は、以下のように、インターフェースを使用してユーティリティメソッドを呼び出すために私を可能シングルトンを提供する:
// Use case #1
IValidator<String> validator1 = StringValidator.instance;
validator1.isValid("");
// Use case #2
StringValidator.instance.isValid("");
しかし、私はまた、内StringValidator
を使用できるようにしたいと思い以下、より簡潔な方法:
// Use case #3: How can I also allow this syntax?
StringValidator.isValid("");
メソッドの名前を変更せずに上記の構文作業のすべての3つを作るために、Javaの方法はありますか? 「非静的メソッドのisValid(String)をstatic参照できませんメッセージで失敗している、しかし
public class StringValidator implements IValidator<String> {
public static final StringValidator instance = new StringValidator();
@Override
public boolean isValid(final String value) {
return StringValidator.isValid(value);
}
public static boolean isValid(final String value, final Object... ignored) {
return true;
}
}
から:私が持っていた唯一のアイデアは、次のように、静的な定義に可変引数パラメータを追加しました型StringValidator "を返します。もう一度、私のユースケース構文の3つすべてをコンパイラに許可する方法がありますか?ありがとう。
私はそうは思わないでしょう。一般に、これを処理する方法は、クラスからインスタンスを静的にインポートすることです。 –
'StringValidator.instance.isValid(" ");'の何が問題になりますか? –