白旗製作所

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ブログユーザー)

twitter

プロフィール

dededemio

Author:dededemio
某電機メーカーエンジニア。
真空管からプログラミングまでゆるゆると。

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

Java (8)
未分類 (0)
真空管 (2)
キー配列 (2)
電子回路 (1)
マイコン (1)
PC部品 (2)
VPN (1)
Android (2)
opera (3)
C# (0)
プログラミング (1)
FTP (1)
メール (1)
tex (1)
音源 (2)
Ubuntu (1)
Python (5)
ブログパーツ (1)
GitHub (0)
Gist (1)
Vivaldi (1)
WICED Sense (2)
害虫駆除 (1)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

QRコード

QR