忍者ブログ
[8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18]

DATE : 2024/04/20 (Sat)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/06/06 (Tue)

スレッド t を実行しようとして、よく私がやらかすミスをここにメモしておきます。

t.run();

上のコードは間違いです。正しくは、以下の通りです。

t.start();

Thread#run()には、新しいスレッドで実行する処理が書かれています。そのため、一応 Thread#run() を実行すれば、新しいスレッドで実行しようとしていた処理そのものは実行されます。

しかし、 Thread#run() を直接呼び出した場合は、新しいスレッドではなく、そのメソッドを呼び出したスレッドで処理が行われてしまいます。

新しいスレッドを起動するには、 Thread#start() を実行しなければなりません。

ちなみに、 FindBugs でコードをチェックすると、このミスをしっかり検出してくれます。

PR

DATE : 2006/05/30 (Tue)

前回の記事

表名がクラス名と異なる場合

前回の記事では、 Person クラスを Person 表に関係付ける例を示しました。

それでは、Person クラスを person_table 表に関係付けたい場合はどうなるでしょうか。

Table アノテーションを使うと、クラスを関係付ける表を指定することができます。Table アノテーションは、クラス宣言の前に付加します。

Table アノテーションの例を以下に示します。「<表名>」の部分を関係付ける表名に置き換えます。

@Table(name="<表名>")

上に挙げた Person クラスを、 person_table 表に関連付ける場合のコードを以下に示します。

(import 文は省略)

@Entity
@Table(name="person_table")
public class Person {
    int id;
    String name;
    int age;

    public Person() { }

    public void setId(int id) {
        this.id = id;
    }

    @Id
    public int getId() {
        return this.id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }
}

つづきます


DATE : 2006/05/29 (Mon)

プロパティの定義方法

以下の形式のメソッドを定義すると、プロパティを定義できます。

なお、<PropertyType> はプロパティの型、<PropertyName> はプロパティ名です。また、設定用のメソッドの引数名は自由です。

メソッドに書くプロパティ名の先頭は大文字です。

読み取り用 public <PropertyType> get<PropertyName>()
書き込み用 public void set<PropertyName>(<PropertyType> arg)

上記のメソッドを両方定義すると、読み取り書き込み可能 (read-write) プロパティ、前者しかない場合は読み取り専用 (read-only) プロパティ、後者しかない場合は書き込み専用 (write-only) プロパティになります。

なお、<PropertyType> が boolean 型の場合は、以下の形式でもプロパティが定義されます。

読み取り用 public <PropertyType> is<PropertyName>()
書き込み用 public void set<PropertyName>(<PropertyType> arg)

読み取り用のメソッド名の先頭が get から is に変わっただけです。

プロパティの定義の例を以下に示します。

(import 宣言やメソッドの中身などは省略)

// date プロパティ(読み出し書き込み可能)

public Date getDate() { ... }
public void setDate(Date date) { ... }

// age プロパティ(読み出し専用)

public int getAge() { ... }

// list プロパティ(書き込み専用)

public void setList(List list) { ... }

// human プロパティ(読み出し専用)

public boolean isHuman() { ... }

なお、メソッドの中身は自由です。つまり、そのプロパティに相当するフィールドの値を操作してもよいですし、他の値を操作しても問題ありません。

プロパティ名

上の例で見たように、メソッド名には get や is の直後の文字を大文字で書きます。しかし、実際のプロパティ名は、その文字を小文字にした文字列となります。

例えば、getHoge のプロパティ名は hoge となります。

ただし、getURL などの、get や is の直後の次の文字も大文字の場合は、直後の文字は小文字に変わりません。

つまり、getURL のプロパティ名は URL となります。

参考文献


DATE : 2006/05/28 (Sun)

前回の記事

簡単な例

次の項目からなる表を、単純にクラスで表現してみます。

表の名前は、「Person」とします。

  1. id(整数、プライマリーキー)
  2. name(文字列)
  3. age(整数)
(import 文は省略)

public class Person {
    int id;
    String name;
    int age;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return this.id;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }
}

これで、 Person を生成するクラスができました。

しかし、これだけでは O/R マッピングを行えません。

前回の記事で示したように、Entity クラスにするための条件を満たさなければなりません。

上の例では、Entity アノテーションが付加されていません。また、引数なしのコンストラクタも用意されていません。そして、プライマリーキーを表すプロパティには Id アノテーションを付加しなければなりません。

以上のことを踏まえて、上の例を修正します。

(import 文は省略)

@Entity
public class Person {
    int id;
    String name;
    int age;

    public Person() { }

    public void setId(int id) {
        this.id = id;
    }

    @Id
    public int getId() {
        return this.id;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }
}

これで、Person が O/R マッピングできるようになりました。

つづきます

忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
ブログ内検索
最近の状況
リンク
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック