java
javaで実装してみた。"1."などのコメントは、エントリMVCアーキテクチャ - @katzchang.contextsの図に対応しています。珍しくクラス図なんて書いてみたけど、こんなんでいーんでしょうか? class user.User ユーザはMVCシステムを定義し、ビューを取り出し、…
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の型パラメータはコンパイラへの情報伝達に過ぎないらしく、実行時に「パラメータとして何のクラスが渡されたか」の情報は持っていないご様子。そのせいか何かわからんが、とにかくオーバーロード*1時にちょっと困ったことになる。元ネタはServiceの…
と思う。リフレクションを多用するフレームワークって、動作を追いにくいんだよねぇ…。フレームワークそのものの構築は楽になるけど。アノテーションも記法を簡単にするものならともかく。クラス定義情報がある場合は呼出階層や定義階層を追えるので、影響範…
上の話題関連。ブクマ貰って嬉しいので(笑)、ちょろっと作った。雑だけど、こりゃ楽だ。 PropertiesFactory.load(class)でカレントディレクトリからXML形式のプロパティファイルを開いて設定をセット、返却。 PropertiesFactory.save(object)でカレントデ…
多言語対応が容易なので。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とすべき?」の方が正しいので、補記。 本文 基本的には、こう言えるんじゃじゃないかという気がするんです。↓みたいなのとか。 pr…
枝葉末節だが。 Rubyなら三行で書けるのに。 いや、1行だ。「File.read("hoge.txt").display」 それどころか1行で書けるのだがw 先のFクラスに↓のメソッドを書き足せば済むだけっちゃそれだけなんだけど、こういった「気軽に使おうと思えば使えちゃう感」っ…
先日のエントリのフォロー。 ファイルの文字コードをMS932で決め打ちにしてるけど、MS932以外の文字コードのファイルでも受け付けるようにしてみてるのも面白いかも。 と書いたけど、これは間違いでした。正確には、実行環境に依存します。MS932.defaultChar…
最もタメになる「初心者用言語」は Javaという記事の中で、 長いですね。 読むのもイヤになります。 Rubyなら三行で書けるのに。 f = open( "hoge.txt" ) f.each {|line| print line} f.close 最もタメになる「初心者用言語」は Java とあったので、上記ruby…
JDKだとJRE System Libraryのソースが見えるので。
つまり、HashMapのキーとして配列は全く使えない。それに対して、ListのhashCode()は要素から取るので、要素が全く一緒なListのhashCode()は同一になる。当然、equalsもtrue。んー、使いにくいなぁ。 追記 上の動作検証をするとき、実はArrayList同士の比較…
列挙するときのセパレータの面倒くささは最強なんだけど、javaのenumではコレが許されるらしい!! public enum Foo{ Fuga,Hoge,; }
何となくな動作確認用として、HttpServletResponseとかのインスタンスを簡単に作れないかなと思ってClass.classとか見て調べたけど結局諦めたのが昨日。で、丁度以下の記事を見て… そうする事とツールS2JUnit4,djUnit,EasyMock,JMock,JDave,etc...を生かして…
Beanの命名規則とか「カプセル化」論に引っ張られて、インスタンス変数をついついprivateにしてsetterとgetterを何も考えずに付けてしまいがちなのは、私だけでしょうか。ですが、そもそも一旦setしたモノって変更されないことも多いというかほとんど変更し…
正確には、「その行時点で宣言されていないenumメンバを指定するとnull扱いになってしまう」。下記コードでは、 StateTransition.S0.next = null StateTransition.S1.next = null StateTransition.S2.next = StateTransition.S0 となっていて、まぁまともに…
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>…
練習がてら、普段の仕事では滅多に日の目を見ない正規表現に手を出してるんだけど、なかなかどうして。元ネタはコレ⇒http://d.hatena.ne.jp/brazil/20050915/1126709945のnumberの方。 Pattern pattern = Pattern.compile("\\Q-\\E?(0|[1-9]\\d*)(\\Q.\\E\\d…
// 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メソッドの場合、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"); } で値のスイッチングができるけ…
先日の続き的な感じで。 パラメータのクラスが結果を格納するクラスに属さない場合、error扱いでチェックされる。 パラメータに互換性がないクラスを指定するとwarning扱いでチェックされ、実行時に当然ClassCastException。 比較が1回多い件は、とりあえず…
チケット買ったままだ。でも1年有効だったはずだから、今年8月まで大丈夫。 それにしても http://www.prometric-jp.com/ の使いにくいこと。
丸め精度指定なしで割り算するとき。 割り算で循環小数になっちゃうってかなり良くあることだから、RuntimeException扱いを投げるくらいなら、Exception扱いを投げた方が、備えが出来てjavaっぽい。 public class Hoge{ public static void main (String...a…
今週のバグランキングにおけるダントツでトップでございます。 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…
何か面白い使い方って、出来ないかな。 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>…