Olen onnellinen.

あしたもどこかで NullPointerException。資格試験とかシステム開発の記録だったりなかったり。

@Overrideアノテーションでエラー

プロジェクトをチェックアウトしてみたらエラーになった。
@Overrideの行でオーバーライドしなくちゃだめだよ〜って言われてる。

んー。オーバーライドしてるんだけどなぁ、と思ったらどうも他の人はエラーにならないらしい。そりゃそうか、エラーのコードをコミットするようなレベルじゃないもんね。

となるとボクの環境が怪しいわけで、ちょっと調べてみたところすべての@Overrideがエラーになっているわけではないようです。

結論、コンパイラの準拠レベルが原因。
JDK5ではインターフェースの実装には@Overrideが使えないらしい。
JDK6ではOKと。

なにも考えずにJDK5を使ってたわけですが、JDK6が常識ですか。そうですか。

なんかもう言語のバージョンアップについていくのが面倒。
ハッ!?まさかこれが歳ってやつですか!?

さっそくPHP6をダウンロードしてくるでありますよ。

このエントリーを含むはてなブックマーク | 

プログラマのココロ

なんかそれっぽいタイトルをつけてみましたが、たいした話じゃないです。スミマセン。

命名規約。
例えば、ユーザのリクエストを受け付ける、そんなサービス。

それを単に"リクエスト"と称し、Requestクラスを作った。
grepでその"リクエスト"機能とHTTPリクエストを区別できますか?

あんまり良い例じゃないので、もう1つ。

message.properties。メッセージ文言を外部に切り出す仕組み。
メッセージIDでgrepしたとき、もれなくメッセージを使っている箇所すべてが例外なく見つかりますか?

  1.  setMessage("A000" + id);


こんなコードにすると、たしかにコード量は減るかもしれません。
しかし、あとでメンテする側にしてみれば絶望を感じるのです。


結局プログラマの思いやりなんじゃないかと。
プログラマによってプログラマが苦しめられるのは悲しいですよね。

このエントリーを含むはてなブックマーク | 

SJC-P:ジェネリクス

5.0からの新機能ジェネリクス。
これもしっかり抑えておく。

■ ジェネリクス

  1.  public class GeneTest {
  2.      public static void main(String[] args) {
  3.          GeneBean<String> sBean = new GeneBean<String>();
  4.          sBean.setValue("Homyu");
  5.          System.out.println(sBean.getValue());
  6.      
  7.          GeneBean<Integer> iBean = new GeneBean<Integer>();
  8.          iBean.setValue(5);
  9.          System.out.println(iBean.getValue());
  10.      }
  11.  }
  12.  class GeneBean<T> {
  13.      private T value;
  14.  
  15.      public T getValue() {
  16.          return value;
  17.      }
  18.      public void setValue(T value) {
  19.          this.value = value;
  20.      }
  21.  }




Objectクラスを取り扱ったり、キャストしたりする機会が多少減る。
上の例だとどんなクラスでも扱えるけど、制限することもできる

  1.  public class GeneTest {
  2.      public static void main(String[] args) {
  3.          GeneBean<String> sBean = new GeneBean<String>(); // コンパイル時にエラー!
  4.          sBean.setValue("Homyu");
  5.          System.out.println(sBean.getValue());
  6.      
  7.          GeneBean<Integer> iBean = new GeneBean<Integer>(); // コンパイル時にエラー!
  8.          iBean.setValue(5);
  9.          System.out.println(iBean.getValue());
  10.      }
  11.  }
  12.  class GeneBean<T extends GeneBean> {
  13.      private T value;
  14.  
  15.      public T getValue() {
  16.          return value;
  17.      }
  18.      public void setValue(T value) {
  19.          this.value = value;
  20.      }
  21.  }




StringやIntegerはGeneBeanのサブクラスではないのでだめー。
ジェネリクスについてはJDKのコードとかが参考になるかも。

このエントリーを含むはてなブックマーク | 

SJC-P:スレッド

SJC-Pの中で(特にJava入門者が)最も難関になりそうなのがスレッドです。
出題数も多いので、一度腰をすえて取り組んでおいたほうが良いです。

■ スレッドの実行

  1.  class ExThread extends Thread {
  2.      int x=0;
  3.      int y=0;
  4.      public void run() {
  5.          for (int i=0; i < 500; i++) {
  6.              System.out.println("x="+ x++ +",y="+ y++);
  7.          }
  8.      }
  9.  }
  10.  public class ThreadTest {
  11.      public static void main(String[] args) {
  12.          ExThread et1 = new ExThread();
  13.          Thread t1 = new Thread(et1); // A
  14.          Thread t2 = new Thread(et1); // B
  15.          t1.start();
  16.          t2.start();
  17.      }
  18.  }



【コード内のAについて】
Threadクラスを拡張したクラスをnewするだけでなく、インスタンスをThreadクラスのコンストラクタに渡すこともできる。これはThreadクラスがRunnableインタフェースを実装しているから。

【コード内のBについて】
同じインスタンスを渡すこともできる。
このプログラムはxとyが1000になるまで出力する。



■ waitとnotify。

  1.  class ExThread extends Thread {
  2.      int x=0;
  3.      public void run() {
  4.          syn();
  5.      }
  6.      public synchronized void syn() {
  7.          if (x == 0) {
  8.              try {
  9.                  x=1;
  10.                  System.out.println("wait!!");
  11.                  this.wait();
  12.                  System.out.println("restart!!");
  13.              } catch (InterruptedException e) {
  14.              }
  15.          } else {
  16.              System.out.println("notify!!");
  17.              this.notify();
  18.          }
  19.      }
  20.  }
  21.  public class ThreadTest {
  22.      public static void main(String[] args) {
  23.          ExThread et = new ExThread();
  24.          Thread t1 = new Thread(et);
  25.          Thread t2 = new Thread(et);
  26.          t1.start();
  27.          t2.start();
  28.      }
  29.  }



出力は

wait!!
notify!!
restart!!

このエントリーを含むはてなブックマーク | 

SJCP概要

■ Sun Certified Programmer for Java 2 Platform 5.0とは
他言語での経験はあるが、オブジェクト指向プログラミング言語の経験がなく、アプリケーションを Java に移植ないし、Java を守備範囲に加えたいと思っているプログラマの方向けにプログラミングコンセプト、開発知識とともに Java の文法の知識、基本的なライブラリを使用したプログラミングの作成能力についてなど、Java の包括的な知識についてテストします。


まさにPHPエンジニアがちょっとJavaをやってみるのにちょうどよいです。

■ Sun Certified Programmer for Java 2 Platform 5.0の概要
試験名SJC-P(Sun Certified Programmer for Java 2 Platform 5.0)
合格ライン59%(43/72)
受験APTC
サイトSun Certified Programmer for the Java Platform 【SJC-P】試験概要@Sun
資格試験の受験なら | プロメトリック
試験内容宣言、初期化、スコープ
フロー制御
APIコンテンツ
並行性
オブジェクト指向コンセプト
コレクション/ジェネリックス
Java言語の基礎

このエントリーを含むはてなブックマーク | 
Copyright © 2008 hydra404 all rights reserved.