java - ifブロック内の変数スコープについて
java初心者です。宜しくお願いします。
javaでポケットPC用のプログラムを作っています。ポケットPCだけでなく、パソコンでも
動かしたいのですが、ポケットPC用のjava("mySaifu")にはGraphics2Dクラスがサポート
されていません。なのでここの記述を
・ポケットPCならGraphicsクラスを使用
・ポケットPC以外ならGraphics2Dクラスを使う
ようにしたいと思い次の様に記述しました。
protected void paintComponent(Graphics g) {
if (System.getProperty("java.vm.vendor").equals("Mysaifu")) {
Graphics g2 = (Graphics)g;
} else {
Graphics g2 = (Graphics2D)g;
}
g2.drawImage(im, 0, 0, 480, 640, this);
:
(省略)
:
}
しかし、これではコーディング時点でエラーになります(Eclipse上で赤波線表示)
ifブロックで宣言されている変数g2が"g2.drawImage(im, 0, 0, 480, 640, this)"以降に
適用されないためです(と自分では認識している)。
結局のところ"g2.drawImage(im, 0, 0, 480, 640, this)"以降の記述をifの両ブロック
PC用、ポケットPC用ともに書かなければならない。少し非効率だと思います。
対策として、次のコーディングをしました
Graphics2D g2 = null;
if (System.getProperty("java.vm.vendor").equals("Mysaifu")) {
g2 = (Graphics)g;
} else {
g2 = (Graphics2D)g;
}
これだと、ポケットPCだった場合(vm.vendorが"Mysaifu"の時)、キャストできま
せんと言われます。
この事(if文で違う変数を宣言する)は、この例に限らず結構あると思います。
みなさんは、この様な場合どうしているのでしょうか?
お礼
解答ありがとございます。 URLまで貼っていただきありがとうございます。 有線変換ドックウを検討しています。 ほかの解答いただいた皆様もありがとうございました