java

例外の本質は何か

例外関係の話題が冷め切らないうちに、例外の本質に付いて考えてみます。 検査例外と非検査例外の本質は何か java 以前のプログラムにおいては、例えばセグメンテーション違反を起こした場合にはアプリケーションが異常終了します。 同様に java においても…

mimic プロジェクトできた

http://sourceforge.jp/projects/jmimic/simple/ なんともなしに申請してみたら、サクッとプロジェクト立っちゃった。 とりあえず仕事に使えるかもと淡い期待を抱きながら、サクッと作ってみよう。

Maybe Java りたーんず 〜 Java で Maybe を書いてみた

モナド則を満たすものがやっとできた。 定義 interface Function<T, R> { public R eval(T arg); } abstract class Monad<T, M> { public abstract <R extends M> R bind(Function<T, R> func); } abstract class Maybe<T> extends Monad<T, Maybe<?>> { public static <T> Maybe<T> unit(T value) { return new J</t></t></t,></t></t,></r></t,></t,>…

Maybe Java

interface Function<T, R> { public R eval(T arg); } class Maybe<T> { public static final Maybe NOTHING = new Maybe<Object>(null); private final T value; private Maybe<T>(T value) { this.value = value; } @SuppressWarnings("unchecked") public <R> R exec(Function<T, R> fu</t,></r></t></object></t></t,>…

C に回帰する Java

TODO

例えば、(C++ で) 初期化リストの中や TMP では if 文なんて使えないので条件演算子を使わなければならない。 条件演算子・・・厨? - ぐるぐる~ 匿名関数が定義できれば良いのにね。 public class test { private final int a; public test(int a) { this.…

非同期メソッドを JUnit でテストする方法

力技 @Test public void testSend() throws Exception { final BlockingQueue<Object> result = new SynchronousQueue<Object>(); new ActorObject(driver) { @Override protected void exec(String func, Object... args) { try { result.put(func); result.put(args); } ca</object></object>…

Java の this について

Javaでは動的に付けたり外したりできず、class宣言時にすべてが決まってしまうから、thisが参照するインスタンスは固定的にできるわけですね。 JavaScriptのthisではまった - No Programming, No Life 実はこれはダウト。Java では継承があるから、事実上 th…

ふと思い立って Quine を作ってみた

Quine.java \u0063\u006c\u0061\u0073\u0073\u0020\u0051\u0075\u0069\u006e\u0065\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028\u0053\u0074…

Object#clone() で行われている小細工

忘れないうちに細かいことについて言及。 cloneについては、別にJavaで書けるんじゃ無いかと思う。return new Object()で良いんじゃないかと思う、中身空なんだから。 http://nazakki.blogspot.com/2009/03/object.html 実は無理。こんなプログラムが書け…

クラスとは何か

とりあえず 「クラスは型である」は間違いである - SiroKuro Page を整理してみようと思った。 自分が考える『クラス』という語句を可能な限り明確にするために、色々と参考にして次のように分けて考える。 クラス定義(ソースコードの記述) クラス型 クラス(…

「クラスは型である」は間違いである

多くの人が間違える箇所なんだけど、クラスと型は別の概念だ。「元々」と「実態」の両方の意味合いにおいて、ね。 正しく言い直すならば【クラス名は型を指す識別子として使用可能である】となる。クラスではなく型であるような識別子は java にはあるし、実…

RE: プログラマー面接時の技術的な質問事項

プログラマー面接時の技術的な質問事項(アプレッソ版) : 小野和俊のブログ に回答してみよう。まだ学生だし、たぶん間違えているけど、気にしない。

finally return の問題って、今の java の仕様が正しいと思う

なぜなら、finally を中断することを禁止することが出来ないから。仮に return, break, continue などで中断することを禁止したとしても、依然として finally から例外が搬出されることを阻止するのは不可能だから。 もちろん、バグの温床になるということで…

RE: メソッドオーバーロードの動的束縛

cf: メソッドオーバーロードの動的束縛とか - しげるメモ さくっと解決してみた。 import javax.script.*; public class ScriptingDispatch { public static void main(String[] args) throws Exception { ScriptingDispatch obj = new ScriptingDispatch();…

なんとなく jsr 命令で再帰

.class public fib .super java/lang/Object .method public <init>()V aload_0 invokenonvirtual java/lang/Object/<init>()V return .end method .method public static fib(I)I .limit locals 2 .limit stack 1024 jsr FIB iload 0 ireturn FIB: iload 0 dup bipush 1</init></init>…

Java で GOTO ライクなことをやってみる

public class Test { public static void main(String[] args) { System.out.println("pass 1"); TEST: { System.out.println("pass 2"); if (1 <= args.length && "skip".equals(args[0])) break TEST; System.out.println("pass 3"); } System.out.println…

Java “超”初心者が犯しやすい7つの過ち

http://journal.mycom.co.jp/news/2008/06/18/041/index.html に触発されて。 ここのところ、大学で行われてる基礎ソフトウェア演習のTAやってまして、その結果『Java の超がつくほどの初心者が犯しやすい過ち』がだいたい見えてきたかなーという感じです…

Generics 関連の話

互換性を保つための実装方式のおかげで直感的でない制限が加わってて(例外クラスはGenericなクラスになれないとか、イレイジャが同じ型になるメソッドはオーバーロードできないとか)、使いづらくなっている部分もありますが。 Genericsはデカい仕様なのか否…

Singleton を破壊する(3)

シリアル化したい場合は http://d.hatena.ne.jp/SiroKuro/20080403/1207237637#c1207267140 ということで、Singleton オブジェクトをシリアル化したいときには、こういう風にします。 import java.io.*; public class Singleton implements Serializable { p…

Singleton を破壊する(2)

ちなみに defineClass の例は、意図的にやらないと起こり難い例ですが、Singleton に Serializable くっつけちゃったりとかはたまーにやるので要注意。シリアル化して逆シリアル化すると、オブジェクト増えます増えます。

Singleton を破壊する

なんとなく気になったので、Singleton を破壊するための TIPS を余談として提示してみます。 結局クラスが一意であることを利用してクラスを1対1に結びついた単一のオブジェクトを作ってるだけなんだから 証明を書くには余白が足りない - 西尾泰和のはてなダ…

if 文と3項演算子の違い

ちょっと実例を出して比較してみようと思う。 if(hoge)var = 1;はvar = (hoge?1:var);に置き換えられる。微妙に速くなると思うけど、実際どうなのかは分からない。 坂口和彦 on Twitter: "if(hoge)var = 1;はvar = (hoge?1:var);に置き換えられる。微妙に速…

フィールド初期化に関して薀蓄

thisはどこからコレなのか - 西尾泰和のはてなダイアリー JavaとPythonのフィールド初期化タイミングの違い - 西尾泰和のはてなダイアリー コメント欄に書いていたら無駄に長くなったので自分のブログに、と。