2017-03-27 6 views
0

評価のために渡されたのparamsの種類に一般汎用の式評価を作成しようとしていJavaのジェネリック階層の定義

public interface Expression<T> { 
    Boolean evaluate(LinkedHashMap<String, T> params) throws Exception 
} 

public class JavaScriptExpression implements Expression<Object> { 
    ... 
} 

私はこの表現をホストし、それを評価し、その真

を返す条件タイプを持っています上記 execute(LinkedHashMap<String, R>)

R

public class Condition<T extends Expression> { 

    private T expression; 

    public Optional<Step> execute(LinkedHashMap<String, R> variableMapping) { 

    } 
} 
がタイプ Tとして渡さ表現型に基づいて、JavaScriptExpression、Rである場合、等オブジェクト

このタイプの情報はジェネリック

答えて

3

で型定義でエンコードすることができますどのようにあなたはConditionに型パラメータとしてRを追加する必要があります。

public class Condition<T extends Expression<R>, R> { 
+0

私はTからRを取り出すことはできないと思いますか?好奇心の外にこのシナリオではスカラはどういうふうに、それは非常に高いタイプのシステムを販売しているので、 –

+0

@ SomasundaramSekarいいえ、私はそうは思わない。ダイヤモンド演算子( 'new Condition <>()')やメソッドを使用して、コールサイトを小さくすることができます。私はScalaがはるかに良くなると思っています(しかし、それには大きな値段を払っています)。 –

関連する問題