Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有两个参数的多分派?_Java_Oop_Generics_Polymorphism_Dispatch - Fatal编程技术网

Java 具有两个参数的多分派?

Java 具有两个参数的多分派?,java,oop,generics,polymorphism,dispatch,Java,Oop,Generics,Polymorphism,Dispatch,以下是我试图支持的用例: IDataStore是一个接口,用于指定如何将数据放入数据存储中。它有两个子接口IDataStoreA和IDataStoreB,它们指定从数据存储中获取数据的不同方式 ICalculator指定对数据执行计算的方法 我想做一个ICalculationPerformer类。这将采用IDataStore和ICalculator的具体实现,并指定如何从数据存储中获取数据并将其传递给计算器的逻辑 public interface ICalculationPerformer<

以下是我试图支持的用例:

IDataStore是一个接口,用于指定如何将数据放入数据存储中。它有两个子接口IDataStoreA和IDataStoreB,它们指定从数据存储中获取数据的不同方式

ICalculator指定对数据执行计算的方法

我想做一个ICalculationPerformer类。这将采用IDataStore和ICalculator的具体实现,并指定如何从数据存储中获取数据并将其传递给计算器的逻辑

public interface ICalculationPerformer<D extends IDataStore, C extends ICalculator>{

有没有办法绕过原始类型警告?

您的ICalculatorPerformer声明使用的是原始类型。为什么不能定义适当的泛型类型ICalculatorPerformer?因为驱动程序不知道它使用的是数据存储和计算器的哪个实现。我们都知道如果我们有一个IDataStore和ICalculator,但也许我们想要一个iCalculationPerformer那么你期待的是iCalculatorPerformerRect,我会试试看它是否修复了导致错误的原始类型警告:当我调用p.performCalculation时,它提示我该方法不适用于参数ICalcKeyToTermMap、IFormulaCalc
public class ConcreteCalculationPerformer extends ICalculationPerformer<DataStoreA, CalculatorA>{
  void performCalculation(DataStoreA dataStore_, CalculatorA calculator_);
}
class driver{
  IDataStore dataStore; //constructor injected via spring
  ICalculator calculator; //constructor injected via spring

public static void main(){
//raw type warning!
  ICalculationPerformer p = 
calculationPerformerFactory.getCalculationPerformer(dataStore,Calculator);

}
}