如何使用接口作为参数?



我正在使用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;
}
}

只需学习javadoc;就像从这里开始的界面LinearSolver一样。

你猜怎么着:有一个部分

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

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

所以你的问题的答案是:你不能实例化接口。相反,您需要查找实现接口的类,然后创建此类的实例。比如:

List<String> strings = new ArrayList<>();

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

手册:

  • 求解线性系统
  • 线性求解器工厂

LinearSolverFactory 是创建新 LinearSolver 的首选方法,它隐藏了大多数低级细节。

  • 创建实现接口的类的实例。接口契约(接口的JavaDoc)很可能非常简单,可以作为匿名内部类执行此操作。

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

然后

  • 将该对象传递给LinearSolver_B64_to_D64()的构造函数

    LinearSolver_B64_to_D64(alg);
    

最新更新