0

我正在使用 EJML 并且我想使用LinearSolver_B64_to_D64具有构造函数的类:LinearSolver_B64_to_D64(LinearSolver<BlockMatrix64F> alg)带有接口LinearSolver<BlockMatrix64F>并且该类已经实现了LinearSolver.

我所知道的: 通常,您创建一个接口,而不是在特定类中实现该接口。我阅读了将接口作为参数的函数(在特定类中),因为这样你的函数就不需要知道关于类的一些信息。

我的问题:我不知道如何初始化类LinearSolver_B64_to_D64,因为我不知道如何将接口作为参数传递。

更新: 我尝试了以下代码:

public class UseMatrixInterface{
    public UseMatrixInterface(){    
    }

    public void do1(){
        DenseMatrix64F a = new DenseMatrix64F(3,3);
        LinearSolver_B64_to_D64 ls = new LinearSolver_B64_to_D64(null); 

//it throws a nullpointer exeption. I assume, it is because i used null
//instead of the requiered parameter.
        ls.invert(a);
        a.print();
    }

    public void do2(){
        LinearSolver<BlockMatrix64F> lsD;
        LinearSolver_B64_to_D64 ls = new LinearSolver_B64_to_D64(lsD);
        //not working, because lsD cannot be initialised;
    }
}
4

3 回答 3

1

不太确定这个问题和这些答案是怎么回事。LinearSolver_B64_to_D64 是一个低级类,用于将块矩阵的线性求解器转换为标准 DenseMatrix64F。您可能不想使用它。

手册:

LinearSolverFactory 是创建新的 LinearSolver 的首选方法,它对您隐藏了大部分低级细节。

于 2017-01-09T05:03:57.313 回答
1

只需学习 javadoc;就像从接口LinearSolver开始一样。

猜猜看:有一个部分

所有已知的实现类:AdjLinearSolverQr_D64,...

去选择一个符合你需求的;并创建该类的实例。

所以你的问题的答案是:你不能实例化interfaces。相反,您会寻找实现接口的类,然后创建此类的实例。像:

List<String> strings = new ArrayList<>();
于 2016-12-23T10:06:17.523 回答
0
  • 创建实现接口的类的实例。接口契约(接口的 JavaDoc)很可能足够简单,可以作为匿名内部类执行此操作

    LinearSolver<BlockMatrix64F> alg = new LinearSolver<BlockMatrix64F>(){
      // implement interface method(s) here
    }   
    

然后

  • 将该对象传递给 LinearSolver_B64_to_D64()

    LinearSolver_B64_to_D64(alg);
    
于 2016-12-23T10:12:03.363 回答