LoginSignup
0
1

More than 5 years have passed since last update.

Java5について調べたこと

Posted at

概要

私のJavaの知識は、「1.4」でほぼ止まってしまっています。
現状を変えるため、少しずつバージョンアップして行こうと思います。

現在、業務で主に触ってたアプリは、「1.5」で動いていますが、
もともとは「1.4」以前に作られたアプリで、古い記述が残っています。
このアプリのバージョンアップを通して「1.5」で追加された機能について調べた事を記載します。

調べたこと

変数名にmapとかlst、strとか付いており、違和感を感じる所があるかもしれませんが、
社内の命名規則(今は違う)に従って記述された箇所なだけなので、気にしないでください。

総称型(ジェネリクス)

総称型(ジェネリクス)を使用できそうな箇所があったので、
下記のように修正しました。

  • 修正前
private Map mapPref = new HashMap();
public String getPrefID(String strName) {
  if (strName == null) {
    return "";
  }
  return mapPref.get(strName) == null ? "" : (String)mapPref.get(strName);
}

キーに都道府県名(東京都など)、値に都道府県ID(北海道は01、東京都の場合は13など)を保存しています。

  • 修正後
private Map<String, String> mapPref = new HashMap<String, String>();
public String getPrefID(String strName) {
  if (strName == null) {
    return "";
  }
  return mapPref.get(strName) == null ? "" : mapPref.get(strName);
}

ジェネリクスを使うことで、Map等などのコレクションに入る値の型が明示的に分かります。
また、指定された型以外の値を入れようとするとエラーになるため、コンパイルエラーも見つけやすくなります。
今回は、コレクションにジェネリクスを用いているが、ジェネリクスを使ってクラスやメソッドを実装することもできる。

参考:ジェネリクス

MakerCode.java
public class MakerCode<T> {
  public void show(T[] id) {
    for (T v : id) {
      System.out.println(v);
    }
  }
}
Car.java
public class Car {
  private String[] id = {"TY", "NS", "HN"};
  public String[] getId() {
    return id;
  }
}
Bike.java
public class Bike {
  private Integer[] id = {10, 20, 30}; //オートボクシング
  public Integer[] getId() {
    return id;
  }
}
Main.java
public class Main {
  public static void main(String[] args) {
    Car car = new Car();
    MakerCode<String> carMakerCode = new MakerCode<String>();
    carMakerCode.show(car.getId());

    Bike bike = new Bike();
    MakerCode<Integer> bikeMakerCode = new MakerCode<Integer>();
    bikeMakerCode.show(bike.getId());
  }
}

さらに、ワイルドカードが使えるようですが、難しい・・・もっと調べる必要がありそう。
参考:ワイルドカード

拡張for文

拡張for文を使用できそうな箇所があったので、
下記のように修正しました。

  • 修正前
List<String> lstMaker = new ArrayList<String>();
SQLParameters sqlParams = new SQLParameters();
for (int i = 0; i < lstMaker.size(); i++) {
  sqlParams.add(lstMaker.get(i));
}

lstMakerには、メーカーに割り当てたID(A社は1とか)が入ってます。

  • 修正後
List<String> lstMaker = new ArrayList<String>();
SQLParameters sqlParams = new SQLParameters();
for (String id : lstMaker) {
  sqlParams.add(id);
}

通常のfor文と比べ記述が簡素になっています。
コーディング量が僅かに減りました。見た目もスッキリ!

オートボクシング

上記の「総称型(ジェネリクス)」に記載しているBike.javaで使用しています。
「1.4」までの場合は、

private Integer[] id = {new Integer(10), new Integer(20), new Integer(30)};

ように書かないと「型の不一致: int から Integer には変換できません」になっていましたが、
「1.5」からは、プリミティブ型からラッパークラスの変換、ラッパークラスからプリミティブ型への変換
を自動で行ってくれるようになりました。

可変引数

アプリ内で使えそうな所が見当たりませんでしたが、
変数の型に続けて「...」と書くことで可変引数として定義出来ます。

public void print(String... value) {
  for (String v : value) {
    System.out.println(v);
  }
}
public static void main(String[] args) {
  (new Main()).print("東京都", "神奈川県", "埼玉県", "千葉県");
}

配列を渡すこともできます。

public static void main(String[] args) {
  String[] pref = {"北海道", "青森県", "山形県", "岩手県"};
  (new Main()).print(pref);
}

可変引数は、各メソッドに1つだけ&最後の引数にのみ指定する事ができます。

列挙型

複数の定数を1つにまとめて管理できる型
下記のような記述を1つの型にまとめる事ができます。

  • 修正前
public static final String STATUS_SUCCESS  = "1";
public static final String STATUS_SHORTAGE = "2";
public static final String STATUS_MISMATCH = "3";
  • 修正後(列挙型を使用)
public enum Status {
  SUCCESS,
  SHORTAGE,
  MISMATCH,
}

下記のように特定の値を持たせる事ができます。

public enum Status {
  SUCCESS  ("1"),
  SHORTAGE ("2"),
  MISMATCH ("3"),
  ;
  private final String value;
  private Status(final String value) {
    this.value = value;
  }
}

メソッドを持つことも出来ます。

public enum Status {
  SUCCESS  ("1"),
  SHORTAGE ("2"),
  MISMATCH ("3"),
  ;
  private final String value;
  private Status(final String value) {
    this.value = value;
  }
  public String getValue() {
    return this.value;
  }
}

その他

その他にも追加された機能がありましたが、一旦「1.5」についてはこれ位にして「1.6」に進もうと思います。
アノテーションについては別途もう少し深く調べてみます。

参考:新機能と拡張機能

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1