白旗製作所

javaで、型の違う配列での四則演算がしたい

javaで、型の違う配列での四則演算をやりたくていろいろ調べたんですが、やっぱそのままじゃ無理そう。

なぜこんなことをやろうと思ったかといえば、
このブログの最初の記事でmatrixクラスとかを作っていたんですが、
int[][]型のmatrixでも、double[][]型のmatrixでも、1つの関数とかで
同じ挙動を実現したいと思ったのが発端。

たとえば以下のようなメソッドを考えます。

public static double[][] plus(double[][] matrix, double[][] target)
{
double[][] result = new double[matrix.length][matrix[0].length];

for(int i=0; i<matrix.length; i++ )
for(int j=0; j<matrix[0].length; j++ )
result[i][j] = matrix[i][j]+target[i][j];
return result;
}



この処理を、以下のようにint[][]配列でも使いたいのです。
int[][] ho = {1, 2};
int[][] ge = {3, 4};
double[][] hoge = plus(ho,ge);

かといって、関数のオーバーロードを型の種類ごとに用意するのは
保守性が悪くなりますし、コード量も多くなりますので、
なるべくどの型でも使える関数みたいなものを用意したいです。

ただ、どの型でも使える関数というのが、どうもjavaでは容易ではないようです。
配列であってもキャストで(int[][])double[][]と書ければ良いんですがね。

候補として考えたのは以下の3つ。
①Objecti[][]型を使う
②Generic型を使う
③型変換メソッドを作る

他にもラムダ式を用いるとかがあると思いますが
java 1.5上での開発のためここでは考えません。

①、②の方法ではObject型やジェネリック型自体に四則演算がないので、
そのままでは使えません。配列要素の入れ替えとかなら出来ると思います。

結局、ちょっとオーバーヘッドが大きいけど、③の型変換メソッドを作って
入れるのが一番手っ取り早いし実現性も高いかなと思います。


#そもそもこんなmatrixのメソッドはdouble以外で使わなければいいんですが、
 使いたくなるシチュエーションがあるんですよね。。。。





スポンサーサイト
  1. 2014/10/20(月) 01:13:52|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
<<BufferedImageが遅い | ホーム | 各種IMAPメール設定>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dededemio.blog.fc2.com/tb.php/18-f5ceaf16
この記事にトラックバックする(FC2ブログユーザー)