1
私はJavaで「動的Enum」のようなものをモデリングしようとしています。許容値の集合を表す汎用インタフェースDomain
と、特定の値を表すインタフェースPoint
がある。このように:このジェネリックの使用で、より正確な戻り値の型を許可する方法は?
public interface Domain<D extends Domain<D>> {
Set<Point<D>> points();
}
public interface Point<D> { // D works a bit like a phantom type
public D type();
}
私の意図は、静的に異なるDomain
タイプからPoint
秒の不慮の混入を禁止することです。
public final class Symbols implements Domain<Symbols> {
final Set<Point<Symbols>> symbols = new HashSet<>();
public Symbols(final Set<String> values) {
super();
for (String value : values) {
this.symbols.add(new SymbolPoint(value));
}
}
@Override
public Set<Point<Symbols>> points() {
return symbols;
}
public class SymbolPoint implements Point<Symbols> {
private final String symbol;
...
}
}
OK動作しているようですが、今私はバリケードを打ってきました:
は、私は次のDomain
実装を持っています。 points()
メソッドSymbols
にタイプSet<SymbolPoint>
を返すようにします。 Set<SymbolPoint>
はSet<Point<Symbols>>
のサブタイプではないため、どちらの方法も機能しません。それを動作させるには?
ありがとうございます。私は、 'Domain、T extends Point > 'のように型パラメータを' Domain'に追加するという別の解決法があると思います。 –
danidiaz