java

MVCアーキテクチャの実装

javaで実装してみた。"1."などのコメントは、エントリMVCアーキテクチャ - @katzchang.contextsの図に対応しています。珍しくクラス図なんて書いてみたけど、こんなんでいーんでしょうか? class user.User ユーザはMVCシステムを定義し、ビューを取り出し、…

class [B

Class c1 = Class.forName("[B"); Class c2 = new byte[0].getClass(); System.out.println(c1.equals(c2)); //prints true "[B"クラスは、byte配列クラスらしい。以下に列挙。 表現クラス "[B"byte "[S"short "[I"int "[J"long "[F"float "[D"double "[C"ch…

単数形と複数形の変換

Railsのpluralize/singularizeメソッドをJavaで使いたいなぁ。

genericsにクラス情報を持たせる

genericsはコンパイラ向けの情報で、実行時にはパラメータクラスの情報は残っていない。ということで、実行時にクラス情報を持たせるべく、インスタンス生成時にパラメータとしてクラスを渡し、インスタンス変数として保持して使いたい!という流れで先日の…

型パラメータの扱いの困ったところ。

Genericsの型パラメータはコンパイラへの情報伝達に過ぎないらしく、実行時に「パラメータとして何のクラスが渡されたか」の情報は持っていないご様子。そのせいか何かわからんが、とにかくオーバーロード*1時にちょっと困ったことになる。元ネタはServiceの…

静的型付である利点を生かすにはソースコードの自動生成が向いている

と思う。リフレクションを多用するフレームワークって、動作を追いにくいんだよねぇ…。フレームワークそのものの構築は楽になるけど。アノテーションも記法を簡単にするものならともかく。クラス定義情報がある場合は呼出階層や定義階層を追えるので、影響範…

PropertiesFactory

上の話題関連。ブクマ貰って嬉しいので(笑)、ちょろっと作った。雑だけど、こりゃ楽だ。 PropertiesFactory.load(class)でカレントディレクトリからXML形式のプロパティファイルを開いて設定をセット、返却。 PropertiesFactory.save(object)でカレントデ…

いい加減、propertiesファイルはxml形式にするべき

多言語対応が容易なので。Properties#loadFromXMLで対応可能。使用例。ファイル名を *.properties.xml とするのが俺々ルール。 Properties p = new Properties(); p.loadFromXML(new FileInputStream("hoge.properties.xml")); p.getProperty("hoge") プロパ…

ソースのテキストをパッケージエクスプローラに貼り付けるとクラスを作ってくれる

いちいちcreate new classとかしないでもいいらしい、最近知った小ネタ。

「開いた人が閉じる」ルール

リソースを使うときは、open〜処理〜closeの流れが見渡せるように設計すること。 例えば↓のようにしないこと。 import java.io.FileInputStream; public class Hoge { public static FileInputStream open(String name) throws Exception { return new FileI…

クラス変数を使用しないメソッドはstaticとすべき?

追記 用語的に「クラス変数」とするとstaticなフィールドを指す様子なので、「インスタンス変数を使用しないメソッドはstaticとすべき?」の方が正しいので、補記。 本文 基本的には、こう言えるんじゃじゃないかという気がするんです。↓みたいなのとか。 pr…

やっぱりjavaは初心者向けとは言えないかも…

枝葉末節だが。 Rubyなら三行で書けるのに。 いや、1行だ。「File.read("hoge.txt").display」 それどころか1行で書けるのだがw 先のFクラスに↓のメソッドを書き足せば済むだけっちゃそれだけなんだけど、こういった「気軽に使おうと思えば使えちゃう感」っ…

MS932.defaultCharset()はMS932が取得できるとは限らない。

先日のエントリのフォロー。 ファイルの文字コードをMS932で決め打ちにしてるけど、MS932以外の文字コードのファイルでも受け付けるようにしてみてるのも面白いかも。 と書いたけど、これは間違いでした。正確には、実行環境に依存します。MS932.defaultChar…

javaはやっぱり長いので、ruby風にしてみる例

最もタメになる「初心者用言語」は Javaという記事の中で、 長いですね。 読むのもイヤになります。 Rubyなら三行で書けるのに。 f = open( "hoge.txt" ) f.each {|line| print line} f.close 最もタメになる「初心者用言語」は Java とあったので、上記ruby…

eclipseはJREでも動くけど、JDKで動かせ。

JDKだとJRE System Libraryのソースが見えるので。

配列のhashCode()は要素に無関係なのか

つまり、HashMapのキーとして配列は全く使えない。それに対して、ListのhashCode()は要素から取るので、要素が全く一緒なListのhashCode()は同一になる。当然、equalsもtrue。んー、使いにくいなぁ。 追記 上の動作検証をするとき、実はArrayList同士の比較…

enumは列挙嫌いにもやさしい

列挙するときのセパレータの面倒くささは最強なんだけど、javaのenumではコレが許されるらしい!! public enum Foo{ Fuga,Hoge,; }

Proxyによるモックインスタンスの生成

何となくな動作確認用として、HttpServletResponseとかのインスタンスを簡単に作れないかなと思ってClass.classとか見て調べたけど結局諦めたのが昨日。で、丁度以下の記事を見て… そうする事とツールS2JUnit4,djUnit,EasyMock,JMock,JDave,etc...を生かして…

final変数を積極的に使ってみる実験

Beanの命名規則とか「カプセル化」論に引っ張られて、インスタンス変数をついついprivateにしてsetterとgetterを何も考えずに付けてしまいがちなのは、私だけでしょうか。ですが、そもそも一旦setしたモノって変更されないことも多いというかほとんど変更し…

自己参照するenumはまともに動かない

正確には、「その行時点で宣言されていないenumメンバを指定するとnull扱いになってしまう」。下記コードでは、 StateTransition.S0.next = null StateTransition.S1.next = null StateTransition.S2.next = StateTransition.S0 となっていて、まぁまともに…

genericsのboundというか、?の動作

genericsのboundってよーわからんとのことなので、調子に乗って説明しちゃうぞ! Listの動作 ↓のコードがコンパイルエラーになるのはなんで?なんでなの? private <T> void add(List list, T t){ list.add(t); } // ==> error // 型 List<capture#1-of ? extends T> のメソッド add(captu</capture#1-of></t>…

jsonのnumberの正規表現

練習がてら、普段の仕事では滅多に日の目を見ない正規表現に手を出してるんだけど、なかなかどうして。元ネタはコレ⇒http://d.hatena.ne.jp/brazil/20050915/1126709945のnumberの方。 Pattern pattern = Pattern.compile("\\Q-\\E?(0|[1-9]\\d*)(\\Q.\\E\\d…

new HashMap…()が冗長なので短くしてみた

// Java5.0 and Later Map<String, Map<String, Map<String, Map<String, Map<String, Integer>>>>> hoge = new HashMap<String, Map<String, Map<String, Map<String, Map<String, Integer>>>>>; こんなコードは見たくない 同感なので、ちょっと短くしてみた。 "NMap.newMap().put("map1", 0);"って書きたいところだけど、エラーとなるらしい。⇒そういやboolean返すんだから当たり前だ。 Mapの実</string,></string,>…

コンストラクタとstaticメソッド

staticメソッドの場合、nullを返却できるのが最大の特徴。 パラメータが無効な場合とか。…でも、IllegalArgumentExceptionを投げるのが、意味としては一番正しいよなぁ。 IllegalArgumentExceptionを継承した独自の「パラメータが無効ですよ例外」を内部クラ…

代入して返却

よう使いませんが。 boolean f = false; System.out.println(f=!f); System.out.println(f=!f); System.out.println(f=!f); 結果はtrue,false,true。 if(f=!f){ System.out.println("t"); } else { System.out.println("f"); } で値のスイッチングができるけ…

Generics、続き。

先日の続き的な感じで。 パラメータのクラスが結果を格納するクラスに属さない場合、error扱いでチェックされる。 パラメータに互換性がないクラスを指定するとwarning扱いでチェックされ、実行時に当然ClassCastException。 比較が1回多い件は、とりあえず…

やべぇ、SJC-P

チケット買ったままだ。でも1年有効だったはずだから、今年8月まで大丈夫。 それにしても http://www.prometric-jp.com/ の使いにくいこと。

グチついでに、BigDecimal#divide(BigDecimal)はExceptionを投げるべきだと思うよ

丸め精度指定なしで割り算するとき。 割り算で循環小数になっちゃうってかなり良くあることだから、RuntimeException扱いを投げるくらいなら、Exception扱いを投げた方が、備えが出来てjavaっぽい。 public class Hoge{ public static void main (String...a…

List#addは自分自身を変えるのに、BigDecimal#addでは自分自身は変わらないという面倒くささは最強

今週のバグランキングにおけるダントツでトップでございます。 public class Hoge{ public static void main (String...args){ BigDecimal b1 = new BigDecimal(100); BigDecimal b2 = new BigDecimal(1); b1.add(b2); System.out.println(b1); } } BigDecim…

genericsととと...と

何か面白い使い方って、出来ないかな。 import java.util.ArrayList; import java.util.List; public class TTest { public static <T> List<T> enlist(T...ts){ List<T> tList = new ArrayList<T>(ts.length); for (T t : ts) tList.add(t); return tList; } public sta</t></t></t></t>…