2016-12-23 4 views
0

私はEJMLを使用しています。クラスLinearSolver_B64_to_D64を使用します。このクラスには、LinearSolver<BlockMatrix64F>というインタフェースを持つLinearSolver_B64_to_D64(LinearSolver<BlockMatrix64F> alg)のコンストラクタがあり、クラスにはすでにLinearSolverが実装されています。interface as parameterの使い方は?

私が知っているもの: 通常、特定のクラスでそのインターフェイスを実装するよりも、インターフェイスを作成します。 インターフェイスをパラメータとする(特定のクラスの)関数について読んでいます。これは、関数がクラスについて何かを知る必要がないためです。

私の質問: 私は、パラメータとしてインターフェイスを渡す方法を知らないので、私は、クラス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はインターフェースのパラメータにする必要があります。コンストラクタがインタフェースを再requieresするので、インスタンスを作成する方法を知っている。 –

+0

実装クラスが実装されたインターフェイスをパラメータとして取るので、私は非常に混乱していますか? –

0
  • インタフェースを実装するクラスのインスタンスを作成します。最も可能性の高いインターフェース契約(インターフェースのjavadocは)匿名内部クラスとしてこれを行うために十分に簡単です

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

その後、

  • コンストラクタにオブジェクトのパスLinearSolver_B64_to_D64()

    LinearSolver_B64_to_D64(alg); 
    
+0

あなたは間違っていると思います。私の答えで概説したように、そのインタフェースを実装するそのフレームワークには**たくさんの**既存のクラスがあります。あなたは本当に線形システムのための**ソルバー**の実装は、ここでは小さな "ここでは匿名のインターフェースを実装する"ということですか? – GhostCat

+0

*「私の答えで概説したように、そのフレームワークには、そのインターフェイスを実装する既存のクラスがたくさんあります。」*あなたの質問のポイントは得られません。あなたは本当にあなたが使用すべき "たくさんの"実装のどれを決定するのかコミュニティを傷つけますか? –

+1

いいえ**私は**彼**が何をすべきかを理解したいです**。あなたは本当に彼が**自分自身で線形ソルバーを実装していること**を提案していますか? **最初の**の代わりに**既存の実装を見て、彼の手のひらにすでに利用可能?つまり、Listインターフェースの実装を求めているのであれば、それを自分自身に実装することを提案しますか? – GhostCat

1

この質問とこれらの回答で何が起こっているのか分かりません。 LinearSolver_B64_to_D64は、ブロック行列の線形ソルバーを標準のDenseMatrix64Fに変換するための低レベルのクラスです。おそらくそれを使用したくないでしょう。

マニュアル:

LinearSolverFactoryは新しいLinearSolverを作成するための好ましい方法であり、あなたからの低レベルの詳細のほとんどを隠します。

関連する問題