Java

Java で TryParse

なんか「Java TryParse」とかで辿りつく人がそこそこいるみたいなんだけど・・・ Commons Lang の MutableInt とかを使えばいいと思うよ。 public static boolean tryParse(String str, MutableInt result) { try { int i = Integer.parseInt(str); result.s…

Java っぽい本を積んでみた

内容はまた後で。 なんか違う本が混じってる?気のせいです>< 取消線が入ってるのは「読むな危険」、タイトルしかないものは「他にいい本があるか古いか興味の対象外」、それ以外はそれ以外です。 もうちょっと詳しく知りたければコメントかなんかで聞いて…

LinkedList の途中への挿入の効率

連結リストの挿入は O(1) ってのに異論はないんだけど、挿入場所が分かっていなければ O(1) じゃなくて O(n) になるってのは忘れられがち・・・というか、下手したら認識されてさえいない。 例えば List#add(int index, E element) の効率だけど、これは ind…

Java データ構造とアルゴリズム基礎講座

Java データ構造とアルゴリズム基礎講座作者: 長尾和彦出版社/メーカー: 技術評論社発売日: 2008/12/26メディア: 大型本購入: 4人 クリック: 164回この商品を含むブログ (13件) を見るえー、結論から言うと、正直微妙。でもまぁ、安いし薄いし、こんなもんか…

値渡しと参照渡し (と参照の値渡し)

値渡しと参照渡しは、分かってしまえば何も難しいところはないんだけど、分かるまでにちょっとした壁があるというかなんとうか・・・ てことでちょっとまとめておきますねー 値渡し (call-by-value) と参照渡し (call-by-reference) の違い 値渡しと参照渡し…

CleanCode Chapter 4:Comments

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)作者: Robert C. Martin出版社/メーカー: Prentice Hall発売日: 2008/08/01メディア: ペーパーバック購入: 1人 クリック: 62回この商品を含むブログ (21件) を見るこの前…

イディオムとか定型的な書き方だとかをどう勉強したのか忘れてしまった

例えば、ファイル入出力だとか、文字列と数値の相互変換だとか、そういったものって一体何で勉強したんだったか・・・ 多分、最初のうちは分からないことがあったらその都度 Google 先生に聞いていたんだったと思う。 ある程度プログラムが組めるようになっ…

CleanCode Chapter 3:Functions

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)作者: Robert C. Martin出版社/メーカー: Prentice Hall発売日: 2008/08/01メディア: ペーパーバック購入: 1人 クリック: 62回この商品を含むブログ (21件) を見るChapter…

Java やってる人が C# を使うとはまること

ここでは、Java SE 5.0 以降を知っている人が C# 2.0 を使うことになった場合を考える*1 *2。 あと、ライブラリについては触れないことにする*3。 命名規約 まず、命名規約が全然違う。Java ではメソッド名にキャメル形式*4を使うけど、C# では Pascal 形式*…

ローカルクラスの意義

矢野勉さんの Wicket 本を買ってきて読んでいたんだけど、ちょっと気になる記述があった*1。 MyDropDownChoice を定義している場所に注目してください。このクラスは HomePage クラスのコンストラクタの中で定義されています。このように Java ではメソッド…

ファイナライザ

ファイナライザは、使うとこんなすばらしいものだから使うんです!というものじゃなくて、仕方なく使うもの。 基本使っちゃ駄目だけど、使わなきゃならないところ*1は仕方ないよね、ということで割り切って考えるのがいいんじゃなかろうか。 あと、C++使いに…

gotoがいやならメソッドを使えばいいじゃない

同僚の人はフラグを使ったやりかた 〜プログラムは略〜 や、例外を使ったやりかた 〜プログラムは略〜 で、いままでやってきたらしい。 なんで?って聞いたら、goto絶対ダメ派なんだそうな。 ラベル付きbreakはgotoじゃないと思うけど、なかなか納得してくれ…

本の数(Amazon)

Amazon.co.jpで、和書で検索した結果、 Java 1,434件 C++ 425件 C# 133件 Javaの結果にJavaScriptも含まれているからそのままの数字をあてにしないように。 ただ、それにしたってJavaは多いな。 Amazon.comでも検索してみた。 Java 66,898Results C++ 21,476…

インターフェイスのメソッドにOverrideアノテーションをつける

Java SE 6以降では、Overrideアノテーションがインターフェイスからのメソッドにも付けられるようになったけど、インターフェイスからのメソッドは実装しなければ1.4以前でもコンパイルエラーになるし、何でこの機能が追加されたかわからなかった。 その疑問…

Effective Java第2版 購入

Effective Java 第2版 (The Java Series)作者: Joshua Bloch,柴田芳樹出版社/メーカー: ピアソンエデュケーション発売日: 2008/11/27メディア: 単行本(ソフトカバー)購入: 69人 クリック: 863回この商品を含むブログ (255件) を見る ジュンク堂にて購入。…

Effective Java第2版

日時 書名 出版社 ISBN 価格(税込) 11月21日(金) Effective Java 第2版 ピアソン・エデュケーション 978-4-89471-499-1 3,780 最近発売の書籍(2008年11月1日〜2008年11月21日) おー、ついにきた。 Effective Java 第2版 (The Java Series)作者: Joshua Bloch…

流れるようなインターフェイス+ジェネリクス

ただ、静的な言語の場合はクラスを継承してメソッドを追加する場合に問題がある。 それは、while() や orderBy() や limit() の戻り値の型が Query のままなので、これらのメソッドの戻り値に対して追加したメソッドがそのままでは呼び出せないということだ…

コレクションイニシャライザとインスタンスイニシャライザ

C#3.0のコレクションイニシャライザを見て、Javaのインスタンスイニシャライザ*1に似ているな、と思った。 まず、C#3.0のコレクションイニシャライザはこんな感じ。 var list = new List<string> { "hoge", "piyo" }; で、Javaのインスタンスイニシャライザはこう。 </string>…

単純なソートはどれが一番単純か

主に行数的な意味で。 Javaで書いてみた。 private static void swap(int[] target, int index1, int index2) { int tmp = target[index1]; target[index1] = target[index2]; target[index2] = tmp; } // 挿入ソート public static int[] insSort(int[] tar…

Nimbusを試してみた

とりあえずコンポーネントをぽちぽちと配置して、mainメソッドの先頭で UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); とすればOK おぉ、かっこいい。Swing Metalとの差は歴然だな。 追記: C:\Program Files\Java\jdk1.6…

インスタンスフィールドを使用しないprivateメソッドはstaticか非staticか

正直、考えたこともなかったw まぁ、そのメソッドがやってる処理の意味によるのかな。 インスタンス(this)に関係ありそうな処理なら非staticだろうし、クラスに関係ありそうな処理ならstaticにする、みたいな。 とりあえずこれが今の自分の結論。

Scanner

20日のコメント欄でid:rf0444にScannerを教えてもらった。 いや、存在自体は知ってたんだけど、全く使ってなかったや。 で、BufferedReaderを使ってた部分をScannerに書き直す場合に注意が必要になりそうな所が少しあった。 以下絶賛書きかけ中。 まず、次の…

? super E

今日、? super Eって使わないよねー、って話が出たので、使う例を紹介しときますね。 例えばこんなメソッド。 public static <E> void copy(List<E> src, List dst) { for (E e : src) { dst.add(e); } } ここで、dstの型をListとしてしまうと、こんなコードは書け</e></e>…

スーパークラスのフィールドへのアクセス

読書会で、抽象クラスのフィールドはデフォルトで protectedにする privateにしてprotectedなgetter/setter*1を用意する のどちらがいいか、という話があった。 昔は後者を好んで使用していたけど、最近はとりあえず前者を使うことが多い。なんたって手軽だ…

Javaでusingブロックもどき(JavaSE7)

Javaのファイナライザ微妙だよな−、という話から発展して、JavaSE7のクロージャでC#のusingブロックのようなものが実現できるようになるかも、という話をしたので、それもついでに補足。 ここで紹介するサンプルは、Closures (Lambda Expressions) for the J…

正しいファイナライザの記述方法

ついでにJavaでの正しいファイナライザの記述方法を紹介しておく*1。 スーパークラスのファイナライザも呼び出す必要がある。 @Override protected void finalize() throws Thowable { try { // ファイナライザの中身 } finally { super.finalize(); } } fin…

ファイナライザ、デストラクタ

読書会で話題に上がったけど、この辺の用語は言語によってまちまちで、かなり紛らわしい。 その場ではファイナライザとデストラクタは別物だよ、と言っただけなんで、補足を。 まずは、言語ごとに何を持っているのかの表を。 言語 ファイナライザ デストラク…

値を保持することを目的としたクラス

一昨日の読書会で空のコンストラクタを強要することの是非から、イミュータブルについて、更に値を保持することを目的としたクラスで「使用不可能」や「まだどうなるか分からない」ことを表す方法について話が発展していった中で、自分がよく使う方法を紹介…

List.asList

List.asListが返すListはaddやらremoveやらは出来ない。 だからaddとかしたけりゃ、それが出来るListを作ってからそれに対してaddすればいい。 List<String> list = new ArrayList<String>(); list.addAll(Arrays.asList("hoge", "piyo")); list.addAll(Arrays.asList("foo",</string></string>…

可変引数の不思議

可変引数は基本的には配列だけど、 interface Hoge { void hoge(String[] args); void piyo(String...args); } class HogeImpl implements Hoge { public void hoge(String...args) {} public void piyo(String[] args) {} } こんな感じのことが可能らしい。…