Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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_Overriding_Raw Types - Fatal编程技术网

Java 重写需要原始类型参数化的方法

Java 重写需要原始类型参数化的方法,java,overriding,raw-types,Java,Overriding,Raw Types,好的,我的问题是:我有一个抽象超类,它包含一个方法publicdouble[][]extractFeatures(buffereImage)抛出异常 我想重写它(也就是说,在定义子类对象时调用子类的实现)。问题是,我使用的实现需要像这样的原始类型参数化,以便正确运行(否则会出现错误)。现在签名变成: public <II extends ImageSingleBand> double[][] extractFeatures(BufferedImage image) 将其更改为cla

好的,我的问题是:我有一个抽象超类,它包含一个方法public
double[][]extractFeatures(buffereImage)抛出异常

我想重写它(也就是说,在定义子类对象时调用子类的实现)。问题是,我使用的实现需要像
这样的原始类型参数化,以便正确运行(否则会出现错误)。现在签名变成:

public <II extends ImageSingleBand> double[][] extractFeatures(BufferedImage image)
将其更改为
classintegrationtype=…
也不能解决问题

我知道我可以通过各种方式跳过这个问题:

  • (a) 重命名子类的
    extractFeatures()

  • (b) 将所有需要原始类型参数化的部分移动到另一个可以在子类
    extractFeatures()
    中调用的函数(这是以前的代码编写者选择的解决方案), 因此,我不是在寻求一个有效的解决方案,而是在澄清情况


我的问题是,是否有一种方法可以解决这个问题,而不用像前面提到的那样使用旁路解决方案,或者擦除问题束缚了我的手脚。

我建议不要使用子分类,而是使用适合此任务的设计模式,例如适配器

Adapter的整个要点是实现一个特定的接口(在您的例子中是参数化方法),它使用不同的接口模块/类/方法来完成实际工作(在您的例子中是非参数化方法)

适配器的实际实现是在接口之间对输入参数进行任何需要的调整,调用实际实现者,根据输出类型调整结果,并返回结果


有关这方面的更多信息,请访问:

当子类方法实现与基类行为不匹配的新行为或重复使用基类行为时,为什么要给子类方法起与基类方法相同的名称?这种设计可能会导致对API的严重误解。对于重写另一个API的方法,它需要具有完全相同的参数。它允许在返回类型中是协变的。也就是说,它必须适用于覆盖的方法可能被忽略的所有情况。我没有看到你在方法签名中使用类型参数
II
——你为什么需要它?@Smutje可能是这样(毕竟是糟糕的设计),但我从一开始就没有设计这个项目,所以添加新功能让我来到这里。毕竟我在学习。@Boris,我不使用它作为签名,但编译器必须继续执行部分
Class integralType=…
。为什么不能将类型绑定到那里?似乎没有理由在方法签名中添加它。谢谢,我会检查它
Class<II> integralType = ...