0

私は EJML を使用しLinearSolver_B64_to_D64ており、constructor:LinearSolver_B64_to_D64(LinearSolver<BlockMatrix64F> alg)を持つ class を使用したいと考え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

javadocを勉強してください。インターフェイスLinearSolverのここから開始するように。

そして、何を推測しますか:セクションがあります

すべての既知の実装クラス: AdjLinearSolverQr_D64, ...

あなたのニーズに合ったものを選んでください。そのクラスのインスタンスを作成します。

したがって、あなたの質問に対する答えは次のとおりです。インターフェースをインスタンス化することはできません。代わりに、インターフェイスを実装するクラスを探して、そのようなクラスのインスタンスを作成します。のように:

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 に答える