2016-12-23 70 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的首選方式,並隱藏了大部分的低層次的細節,從你的。