Java通用层次结构定义

Java通用层次结构定义,java,generics,Java,Generics,正在尝试创建通用表达式求值器,该求值器根据传入求值的参数类型进行泛化 public interface Expression<T> { Boolean evaluate(LinkedHashMap<String, T> params) throws Exception } public class JavaScriptExpression implements Expression<Object> { ... } 公共接口表达式{ 布尔求值(Li

正在尝试创建通用表达式求值器,该求值器根据传入求值的参数类型进行泛化

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

public class JavaScriptExpression implements Expression<Object> {
  ...
}
公共接口表达式{
布尔求值(LinkedHashMap参数)引发异常
}
公共类JavaScriptExpression实现表达式{
...
}
我有一个条件类型,它承载这个表达式,对它求值并返回true

public class Condition<T extends Expression> {

    private T expression;

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

    }  
}
公共类条件{
私人T表达;
公共可选执行(LinkedHashMap变量映射){
}  
}
上述
execute(LinkedHashMap)
中的
R
基于作为type
T
传入的表达式类型,如果JavaScriptExpression,R是Object等


如何使用泛型在类型定义中编码此类型信息

您需要将
R
作为类型参数添加到
条件

public class Condition<T extends Expression<R>, R> {
公共类条件{

您需要将
R
作为类型参数添加到
条件

public class Condition<T extends Expression<R>, R> {
公共类条件{

我可以假设没有办法从T中提取R?只是出于好奇,scala在这种情况下是如何公平的,因为它销售it类型的系统high@SomasundaramSekar不,我不这么认为。您可以使用“菱形运算符”(
newcondition()
)或一种方法来缩小调用站点。我认为Scala做得更好(但为此付出了沉重的代价)。我可以假设我无法从T中提取R?只是出于好奇,scala在这种情况下如何公平,因为它销售的是it类型的系统high@SomasundaramSekar不,我不这么认为。您可以使用“菱形运算符”(
newcondition()
)或者是一种使呼叫站点更小的方法。我认为Scala做得更好(但为此付出了沉重的代价)。