【发布时间】:2017-12-21 19:11:40
【问题描述】:
我正在使用 jar 文件中的 SimpleMatrix 类(如果您碰巧知道它,则为 EJML)。 我想实现一个与此类一起使用的新方法,因此决定通过创建 MyMatrix 类来扩展 SimpleMatrix。 但是,当我使用静态超类方法时,我遇到了问题。例如,如果我尝试:
MyMatrix WL = MyMatrix.random64(layerDims[i], layerDims[i-1], min, max, rand);
我收到一个编译错误,要求我将结果转换为 MyMatrix。我相信这是因为该方法返回一个 SimpleMatrix 对象。如果我尝试:
MyMatrix WL = (MyMatrix)(MyMatrix.random64(layerDims[i], layerDims[i-1], min, max, rand));
程序编译,但随后我收到运行时错误,提示无法将 SimpleMatrix 强制转换为 MyMatrix。为什么我不能投? MyMatrix 只是简单地扩展了超类,并具有一些调用超构造函数的构造函数,并且还有一个附加方法。
我有一个解决方法,方法是在 MyMatrix 中创建一个采用 SimpleMatrix 的构造函数:
MyMatrix(SimpleMatrix simple)
{
super(simple);
}
我可以这样使用:
MyMatrix WL = new MyMatrix(MyMatrix.random64(layerDims[i], layerDims[i-1], min, max, rand));
这似乎不太对劲。有什么建议我应该如何处理?
【问题讨论】:
-
在不知道您要达到的目标的情况下很难回答这个问题。但是
random64方法会生成SimpleMatrix- 它不可能生成MyMatrix,因为这不是您的方法。如果您想要一个生成MyMatrix的方法,您需要自己编写。
标签: java inheritance casting