@Overrideアノテーションでエラー
プロジェクトをチェックアウトしてみたらエラーになった。
@Overrideの行でオーバーライドしなくちゃだめだよ〜って言われてる。
んー。オーバーライドしてるんだけどなぁ、と思ったらどうも他の人はエラーにならないらしい。そりゃそうか、エラーのコードをコミットするようなレベルじゃないもんね。
となるとボクの環境が怪しいわけで、ちょっと調べてみたところすべての@Overrideがエラーになっているわけではないようです。
結論、コンパイラの準拠レベルが原因。
JDK5ではインターフェースの実装には@Overrideが使えないらしい。
JDK6ではOKと。
なにも考えずにJDK5を使ってたわけですが、JDK6が常識ですか。そうですか。
なんかもう言語のバージョンアップについていくのが面倒。
ハッ!?まさかこれが歳ってやつですか!?
さっそくPHP6をダウンロードしてくるでありますよ。
@Overrideの行でオーバーライドしなくちゃだめだよ〜って言われてる。
んー。オーバーライドしてるんだけどなぁ、と思ったらどうも他の人はエラーにならないらしい。そりゃそうか、エラーのコードをコミットするようなレベルじゃないもんね。
となるとボクの環境が怪しいわけで、ちょっと調べてみたところすべての@Overrideがエラーになっているわけではないようです。
結論、コンパイラの準拠レベルが原因。
JDK5ではインターフェースの実装には@Overrideが使えないらしい。
JDK6ではOKと。
なにも考えずにJDK5を使ってたわけですが、JDK6が常識ですか。そうですか。
なんかもう言語のバージョンアップについていくのが面倒。
ハッ!?まさかこれが歳ってやつですか!?
さっそくPHP6をダウンロードしてくるでありますよ。
プログラマのココロ
なんかそれっぽいタイトルをつけてみましたが、たいした話じゃないです。スミマセン。
命名規約。
例えば、ユーザのリクエストを受け付ける、そんなサービス。
それを単に"リクエスト"と称し、Requestクラスを作った。
grepでその"リクエスト"機能とHTTPリクエストを区別できますか?
あんまり良い例じゃないので、もう1つ。
message.properties。メッセージ文言を外部に切り出す仕組み。
メッセージIDでgrepしたとき、もれなくメッセージを使っている箇所すべてが例外なく見つかりますか?
こんなコードにすると、たしかにコード量は減るかもしれません。
しかし、あとでメンテする側にしてみれば絶望を感じるのです。
結局プログラマの思いやりなんじゃないかと。
プログラマによってプログラマが苦しめられるのは悲しいですよね。
命名規約。
例えば、ユーザのリクエストを受け付ける、そんなサービス。
それを単に"リクエスト"と称し、Requestクラスを作った。
grepでその"リクエスト"機能とHTTPリクエストを区別できますか?
あんまり良い例じゃないので、もう1つ。
message.properties。メッセージ文言を外部に切り出す仕組み。
メッセージIDでgrepしたとき、もれなくメッセージを使っている箇所すべてが例外なく見つかりますか?
- setMessage("A000" + id);
こんなコードにすると、たしかにコード量は減るかもしれません。
しかし、あとでメンテする側にしてみれば絶望を感じるのです。
結局プログラマの思いやりなんじゃないかと。
プログラマによってプログラマが苦しめられるのは悲しいですよね。
SJC-P:ジェネリクス
5.0からの新機能ジェネリクス。
これもしっかり抑えておく。
■ ジェネリクス
Objectクラスを取り扱ったり、キャストしたりする機会が多少減る。
上の例だとどんなクラスでも扱えるけど、制限することもできる
StringやIntegerはGeneBeanのサブクラスではないのでだめー。
ジェネリクスについてはJDKのコードとかが参考になるかも。
これもしっかり抑えておく。
■ ジェネリクス
- public class GeneTest {
- public static void main(String[] args) {
- GeneBean<String> sBean = new GeneBean<String>();
- sBean.setValue("Homyu");
- System.out.println(sBean.getValue());
- GeneBean<Integer> iBean = new GeneBean<Integer>();
- iBean.setValue(5);
- System.out.println(iBean.getValue());
- }
- }
- class GeneBean<T> {
- private T value;
- public T getValue() {
- return value;
- }
- public void setValue(T value) {
- this.value = value;
- }
- }
Objectクラスを取り扱ったり、キャストしたりする機会が多少減る。
上の例だとどんなクラスでも扱えるけど、制限することもできる
- public class GeneTest {
- public static void main(String[] args) {
- GeneBean<String> sBean = new GeneBean<String>(); // コンパイル時にエラー!
- sBean.setValue("Homyu");
- System.out.println(sBean.getValue());
- GeneBean<Integer> iBean = new GeneBean<Integer>(); // コンパイル時にエラー!
- iBean.setValue(5);
- System.out.println(iBean.getValue());
- }
- }
- class GeneBean<T extends GeneBean> {
- private T value;
- public T getValue() {
- return value;
- }
- public void setValue(T value) {
- this.value = value;
- }
- }
StringやIntegerはGeneBeanのサブクラスではないのでだめー。
ジェネリクスについてはJDKのコードとかが参考になるかも。
SJC-P:スレッド
SJC-Pの中で(特にJava入門者が)最も難関になりそうなのがスレッドです。
出題数も多いので、一度腰をすえて取り組んでおいたほうが良いです。
■ スレッドの実行
【コード内のAについて】
Threadクラスを拡張したクラスをnewするだけでなく、インスタンスをThreadクラスのコンストラクタに渡すこともできる。これはThreadクラスがRunnableインタフェースを実装しているから。
【コード内のBについて】
同じインスタンスを渡すこともできる。
このプログラムはxとyが1000になるまで出力する。
■ waitとnotify。
出力は
出題数も多いので、一度腰をすえて取り組んでおいたほうが良いです。
■ スレッドの実行
- class ExThread extends Thread {
- int x=0;
- int y=0;
- public void run() {
- for (int i=0; i < 500; i++) {
- System.out.println("x="+ x++ +",y="+ y++);
- }
- }
- }
- public class ThreadTest {
- public static void main(String[] args) {
- ExThread et1 = new ExThread();
- Thread t1 = new Thread(et1); // A
- Thread t2 = new Thread(et1); // B
- t1.start();
- t2.start();
- }
- }
【コード内のAについて】
Threadクラスを拡張したクラスをnewするだけでなく、インスタンスをThreadクラスのコンストラクタに渡すこともできる。これはThreadクラスがRunnableインタフェースを実装しているから。
【コード内のBについて】
同じインスタンスを渡すこともできる。
このプログラムはxとyが1000になるまで出力する。
■ waitとnotify。
- class ExThread extends Thread {
- int x=0;
- public void run() {
- syn();
- }
- public synchronized void syn() {
- if (x == 0) {
- try {
- x=1;
- System.out.println("wait!!");
- this.wait();
- System.out.println("restart!!");
- } catch (InterruptedException e) {
- }
- } else {
- System.out.println("notify!!");
- this.notify();
- }
- }
- }
- public class ThreadTest {
- public static void main(String[] args) {
- ExThread et = new ExThread();
- Thread t1 = new Thread(et);
- Thread t2 = new Thread(et);
- t1.start();
- t2.start();
- }
- }
出力は
wait!!
notify!!
restart!!
SJCP概要
■ Sun Certified Programmer for Java 2 Platform 5.0とは
まさにPHPエンジニアがちょっとJavaをやってみるのにちょうどよいです。
■ 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言語の基礎 |



