2016-12-23 37 views
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; 
    } 
} 
+1

您需要将接口的实现作为实际值传递。 –

+0

您需要一个实现LinearSolver 接口的类的实例。 –

回答

1

只是学习的javadoc;就像从这里开始接口LinearSolver一样。

你猜是什么:有一章节

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

去接符合您的需求的;并创建该类的实例

所以你的问题的答案是:你不能实例化接口。相反,你需要注意实现接口的类,然后创建这样一个类的实例。像:

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

我对编程非常陌生,所以阅读javadoc也是“困难的”,但我试过'LinearSolver_B64_to_D64 ls = new LinearSolver_B64_to_D64(argument);',但其中“argument”ist应该是接口的参数,现在我不用知道如何创建一个实例,因为构造函数需要一个接口。 –

+0

现在我很困惑,因为实现类将实现的接口作为参数? –

0
  • 创建一个实现接口的类的实例。最有可能的界面合同(接口的JavaDoc)是很简单的做到这一点作为一个匿名内部类

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

然后

  • 通该对象的构造的LinearSolver_B64_to_D64()

    LinearSolver_B64_to_D64(alg); 
    
+0

我觉得你走错了路。正如我在我的回答中概述的那样,在该框架中有大量现有类实现该接口。你真的认为为线性系统实现一个** Solver **是一个小“在这里实现匿名接口”类型的活动?! – GhostCat

+0

*“正如我在我的回答中概述的那样,该框架中有大量现有的类实现该接口。”然后,我不明白你的问题。你是否真的想让社区决定你应该使用哪些“大量”实现? –

+1

不,我想让他**来判断他应该做什么。你真的建议他**自己实现**线性求解器吗?而不是**先查看已有的*实现,这些实现在他的指尖已经可用了?或者换句话说:如果他会要求实现List接口,那么你是否也会建议将它自己实现给他? – GhostCat

1

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

的手册:

LinearSolverFactory是创建一个新的LinearSolver的首选方式,并隐藏了大部分的低层次的细节,从你的。