2

クラスに2つのオーバーロードされたコンストラクターメソッドがあります(UJMPパッケージから):

DefaultSparseIntMatrix(long... size)

DefaultSparseIntMatrix(int maximumNumberOfEntries, long... size)

2 番目のものを int で呼び出したいのですが、コンパイラで次のエラーが発生します。

reference to DefaultSparseIntMatrix is ambiguous

これは私が今それを呼び出す方法です:

Matrix m = new DefaultSparseIntMatrix((int) (vertices.length*50), (long) vertices.length, (long) vertices.length);

最初のパラメータを long ではなく int にする方法を教えてください。にキャストするだけ(long)ですが、intにする必要があります。

4

3 に答える 3

2

試す

Matrix m = new DefaultSparseIntMatrix((int) (vertices.length*50), new long[]{vertices.length,vertices.length});

vararg は配列のシンタックス シュガーであり、配列を直接渡すこともできます

于 2011-11-06T22:19:57.207 に答える
2

long のリスト、または int の後に long のリストを指定して関数を呼び出すことは、特に java が自動的に int を long にキャストするため、問題を引き起こしているだけです。(つまり、そのコンストラクターに渡したものは、どちらでも機能します)。

このパラメーター パターンに固執している場合 (変更することを強くお勧めします)、(int 型ではなく) Integer 型を取り、明示的に Integer オブジェクトを関数に渡す必要があります。

言い換えれば、これを試してください:

DefaultSparseIntMatrix(Long... size)

DefaultSparseIntMatrix(Integer maximumNumberOfEntries, Long... size)
于 2011-11-06T22:20:20.757 に答える
1

私はビルダーパターンを使用し、次のようなものを使用します。これは、コンストラクターと同じくらい使いやすく、その目的がより明確です。

Matrix m = new DefaultSparseIntMatrixBuilder().withMaxNumberOfEntries(vertices.length * 50)
                                              .withSize(vertices.length, vertices.length)
                                              .build();

build メソッドは、ビルダー自体を一意の引数として DefaultSparseIntMatrix のプライベート コンストラクターを呼び出し、コンストラクターはビルダーからデータを取得します。

于 2011-11-06T22:24:58.973 に答える