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以外で使わなければいいんですが、
使いたくなるシチュエーションがあるんですよね。。。。