私は、異なる引数型を取る同じ名前の2つの(オーバーロードされた)メソッドを持つインターフェイスを持つAPIを持っています。これらの異なるタイプは両方とも技術的に機能的なインターフェースですが、ユーザーはそのうちの1つのインスタンスを作成することを許可すべきではありません。ここでは簡単な例です:ラムダ式のターゲットとしての機能インターフェイスの停止方法を教えてください。
public class Example
{
@FunctionalInterface
public interface Computation
{
int compute();
}
public interface WrappedComputation
{
Computation unwrap();
}
public static class Solver
{
public static int solve(Computation a)
{
return a.compute();
}
public static int solve(WrappedComputation b)
{
return solve(b.unwrap());
}
}
public static void main(String... args)
{
// 'Computation' interface should be a lambda target
// so coder can make their own 'A' computation
Solver.solve(() -> { return 5 + 5; });
// 'WrappedComputation' interface SHOULD NOT be a lambda target
// or else coder can cause runtime exceptions etc., like passing a null 'Computation' reference that will be computed
Solver.solve(() -> { Computation a = null; return a; });
}
}
私が持っている唯一のアイデアはこれまでのところ、私はラムダターゲットになりたい、とのすべてでそれを実装していないインターフェイスにダミー/未使用のメソッドを追加することですクラスを実装する。それはちょっとやっかい/不要なようですが...他の提案はありますか?