java

この発想はなかった!

問 以下のコードの欠点を列挙せよ。 コード public class Hoge { public Exception hoge() { try { //... //... } catch (Exception e) { if(e instanceof FooException) { return new HogeException(e.getMessage()); } } try { //... //... } catch (Excep…

nullによる初期化を回避せよ その2

次のクラスメソッドFoo.hoge(bar)は、barの内容をひらがなに変換するメソッドである。ただし、barがnullの場合はnullを返す。String hiraのnullによる初期化を回避せよ。 public class Foo { public enum Bar {Hoge, Fuga, Piyo}; public static String hoge…

多重tryブロックの除去

nullによる初期化回避の解答例 - @katzchang.contextsに対してコメントをいただいた件。 id:Nagise 二重tryブロックになるととたんに見通しが悪くなる…。完璧な例外処理の例を誰か教えてほしい。 はてなブックマーク - nullによる初期化回避の解答例 - @katz…

nullによる初期化回避の解答例

nullによる初期化を回避せよ - @katzchang.contextsの解答例です。方針としては「"FileInputStream stream"の宣言とクローズをブロック内で閉じる」が全てです。 解答例1は例外処理を階層化させる考え方で、構造化(大規模への対応)しやすいのが利点です。…

nullによる初期化を回避せよ

以下は、改行で区切られた数値が保存されているファイル"hoge.txt"を読み込み、合計値を出力するコードである。このコードについて、streamのnullによる初期化を回避せよ。 import java.io.*; public class Foo { public static void main(String[] args) { …

"".equalsの話

Rubyへの移行を提案します。ってのは本気として(笑)Proxyクラスなんて卑怯なインスタンスも作れるくらいだから、nullオブジェクトとして扱うのもそんなに難しくないはずなんですよね(参考)。 nullオブジェクトについて「nullは全てのクラスのサブクラス…

require

Rubyのrequireは組み込み関数の一つで、簡単に言うと渡された名前のスクリプトを実行させるコマンドであるわけでして。対してJavaのimportは単なる名前解決のための手段であって、必須ではない。いちいち java.util.List<java.sql.ResultSet> results = hoge こんな書き方もでき</java.sql.resultset>…

配列リテラルっぽいものを考えてたら、「プリミティブ型配列は使っちゃなんねー」という結論に行き着いた

Rubyで配列リテラルが書けるのは、型無しの言語だから。MLでリストリテラルが書けるのは、型推論があるから。 Javaの配列リテラルで彼女ができた - soutaroブログ じゃぁ、型推論させればいいのね。ということで、ちょっと試した。 String[] strings = new S…

JavaでIDE使わないで許されるのはHello Worldまでだよねーwwww

と煽ってもいーんじゃないかと思った、わんくま富山勉強会の2次会でした。 ということを今思い出した。一応、以前にちらっと書いたことはあるんだけどね。 スクリプト言語方面の人に人気ないわけだお。

例外処理は処理コストが掛かるらしいことを確かめようとしたら、意外とそうでもなかった話

例外処理はパフォーマンスが低下するという話がよくあるので、確かめてみた。メソッド処理でエラーが起こった場合、返却値としてステータスコードを返すパターンと、例外を投げるパターンで処理時間を計測した。で、下で示したコードで検証したところ、エラ…

発生元情報を保持するnullっぽい何か

Informative Null Pointer (1) - d.y.dで仰ってるのは、こんな感じでしょうか。確かに、あったら便利そう。 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Arrays; publ…

OOコード養成ギブスのコメント欄の和訳 その3

Binstock on Software: Perfecting OO's Small Classes and Short Methodsのコメント欄より。OOコード養成ギブスのコメント欄の和訳 - @katzchang.contextsの続きのOOコード養成ギブスのコメント欄の和訳 その2 - @katzchang.contextsの続き。 Paul Keeble …

OOコード養成ギブスのコメント欄の和訳

OOコード養成ギブス - rantsという記事より、あまりにも原理主義的っぽいので賛否があるだろうなぁと思いつつ、元記事のコメント欄を読んで、途中まで和訳してみた。パッと見では、論点はぶコメとあんまり変わんないですね。 31 comments... Binstock on Sof…

OOコード養成ギブスのコメント欄の和訳 その2

Binstock on Software: Perfecting OO's Small Classes and Short Methodsのコメント欄より。OOコード養成ギブスのコメント欄の和訳 - @katzchang.contextsの続き。 Douglas Squirrel said... JavaのCheckStyleで書けばいいんじゃないか。これ誰か試した人い…

例外を握りつぶしたい衝動に駆られた場合

try { //... } catch(HogeException e) { throw new RuntimeException(e); } せめてこうしましょう、と言うお話でした。 簡単に作る場合、これでもいいと思うんだよね。たまに↓みたいなサンプルコードもあるけど、それよりもずっといい。 try { //... } catc…

JavaでIoの構造っぽいものを(超簡単に)書いてみる

超簡単に、ですよ。循環継承はループから抜け出せませんので。オブジェクトには、slotマップとprotosリストがあって、slotでそのオブジェクトが独自に持つデータを管理し、protosでそのオブジェクトの親オブジェクトを管理する。slotが呼ばれた場合、自分のs…

java.util.Date.compareTo(java.sql.Timestamp time)は危ない。

System.out.println(new java.util.Date(10000).before(new java.sql.Timestamp(20000))); System.out.println(new java.util.Date(10000).before(new java.sql.Timestamp(10999))); 上記1行目では"true"を返す。基準時から10000ミリ秒経過後の時間は基準時…

ある期間が他の期間と被ってるかを検査する

仕様 ある期間が他の期間と被ってるかを検査する。 検査する期間は閉じているか、下に開いているか、上に開いているかのどれか。 上下ともに開いている期間は扱わない。 とりあえず面倒なので。 本体 public class Util { public static <T extends Comparable<? super T>> Period<T> period(T l</t></t>…

ActionLinkが動かなかった件

http://click.arcanum.jp/pages/control/table/の「テーブルにリンクを埋め込んでサーバ処理を行う場合」を参考に作ってたんだけど、ActionLinkで指定したメソッドが呼ばれてる気配がなかった。原因はActionLinkのアクセス制御で、publicにすべきところをpri…

context.getRequest()が見つからない?

clickでFORM認証を試してるんですが、認証された情報の取得 - ユーザー認証 - サーブレット入門によるとServletからはRequestの中に認証したユーザ情報が格納されてるようなので、pageクラスで↓の様に書こうとしたら、EclipseにgetRequest()が見つからない旨…

Java5とJava6の微妙な違い

Java5で導入された@Overrideアノテーション。Java5では、親クラスのメソッドを継承するときのみ@Overrideを指定できた。それに対してJava6では、親クラスだけではなくインタフェースの実装メソッドに対しても@Overrideを指定できるようになった様子。なので…

Commons4Eを使ってみる。

toString()を書くのが面倒だったので、使ってみた。 更新サイト:http://commons4e.berlios.de/updatesite/ 依存パッケージ:org.apache.commons.lang 指定したフィールドについて、toStringに出すかどうかとかequalsの対象にするかどうかとかを選んで、ソー…

JDBCは何とかならんのか

java.sql.ResultSetについて。 int等のプリミティブ型じゃなく、ラッパークラスで返しなさい。public Integer getInteger(String columnLabel)とか。ってか、nullを「0」で取るのはバグだろー。 というか、public T get(String columnLabel)を用意しなさい。…

SJC-P受かった

採点結果 合格点:59% 得点:70% テストステータス:合格 セクション別の採点結果 宣言、初期化、スコープ:83% フロー制御:72% APIコンテンツ:60% 並行性:62% オブジェクト指向コンセプト:70% コレクション/ジェネリクス:90% Java言語の基礎:54% 感想…

「ドメインロジックとSQL」のJava版サンプル

トランザクション・スクリプトとドメイン・モデル - @katzchang.contextsという記事で色々コメント頂いた&考えた結果、やっぱりよくわからんという結論になった。ということでお勉強に、Martin Fowlerさんの「ドメインロジックとSQL」という記事で示されたR…

Javaでテストファースト、挫折しそうです。

タイトルに「早くも」って入れた方がよかったかもwとにかく、他の言語では知らないけど、Javaではつらくない?つらすぎない?インタフェースや抽象クラスにしか抽象的なメソッドが定義できないし、クラスを継承した抽象クラスは定義できる割にインタフェー…

アクセッサ云々は本質的じゃない

って、bean嫌いとしては思うんだけれども。と、ボソッと。要は、メソッド定義が長くて面倒ってことなのかな?わからんけど。

beanって、要するに構造体でしょ?

何が違うって、何も違わないような。

概要そのものをプログラムに落としてみる

例えば、以下の業務を考える。この業務をシステムに落とす場合、どうする? 営業部門は顧客から受け付けた注文書を元に、生産部門へ出荷指示書を発行し、生産部門は顧客へ指示通りに商品を出荷する。 「注文書にはどういう内容があるのか?商品、数量、納期…

抽象的な型にはキャストしないでしょ。

追記: 思い出した。「アップキャスト」だ!javaでは、アップキャストは明示的に指定する必要はない、だ。「抽象的な型にはキャストしない」は表現として良くない。突っ込み記事なのに、恥ずかしい>< 本文: JavaとRuby:主要機能の比較という記事の間違い…