メタモデル記述をJavaで書いて解釈するってのが前回の主張ですが、GAE以外のケースでいくらかうまくいかないものを発見。 たとえば、HogeがFooを参照していて、それぞれのメタモデルがHogeMetaとFooMetaであるとすると、HogeMetaは次のように書かなきゃいけ…
JDOはどう考えてもDatastore Low Level APIと相性が悪い Low Level APIはEntityを生で扱うあたりがありえない Javaはかなり厳格にnominal typeを扱うので、Pythonのような無茶がしにくい というあたりで、モデル記述からエンティティモデルを自動生成するス…
寝ようと思った瞬間になんか思いつくのはもはや呪い。 @Dao(Hoge.class) public interface HogeDao { @Read Hoge get( // WHERE email = :email AND ANCESTOR = :parentKey @Parent String parentKey, String email ); @Read @OrderBy("date asc") List<Hoge> get(</hoge>…
めも。 where lcta() is the the least containing type argument function defined (assuming U and V are type expressions) as:lcta(U, V) = U if U = V, ? extends lub(U, V) otherwise lcta(U, ? extends V) = ? extends lub(U, V) lcta(U, ? super V) …
下記はJDTでエラー。 static void f() { int[][] a = null; int[][][] b = null; Object[] tt = tt(a, b); // error@JDT } static <T> T tt(T a, T b) { return a; } 次元数が違うプリミティブの配列型を渡したときにエラーになる。</t>
f()の中身はJDTではすべてOK、javacでは全滅。なんか代入コンテキストの判定がおかしくない? private void f() { if (t()) {} assert t(); int a = t() ? 1 : 2; for (;t();) {} while (t()) {} do {} while(t()); System.out.println((new int[t()])[t()])…
メモ。コンテキストによって動作が変わるもののうち、忘れそうなもの。 (こういうのってレフトコンテキストとか呼ぶんでしたっけ)
思いつきメモ。 class Hoge { static interface Expr {} static class Add implements Expr { protected Expr left; protected Expr right; } static class Sub implements Expr { protected Expr left; protected Expr right; } static class Value impleme…
メソッドの型推論エンジン作ってて、そのテストケースの洗い出し中。 Java言語仕様(第3版)の15.12.2.7 Inferring Type Arguments Based on Actual Argumentsを私なりに解説してみようと思います。理解してしまえば、そんな実装が難しいものではありません。…
今回はちょっと難易度高め。 メソッドの型推論にちょっとした穴を見つけたので動作確認してたら動きが異なりました。捕捉変換に関する覚え書き - しげるメモの概要をつかんでないと何言ってるか分からないかもしれません。
まじめにJavaの型推論書いてるのでメモ。capture-#xとか分かるようになるかも。 レビューに付き合ってくださる方は Java SE Specifications からPDFをダウンロードしておくとよいかと*1。 *1:リンク貼るのが面倒になった
List<null>型を作れないか考えてて全然関係ないこと思いついた。 void f() { String a1 = id(null); // ok String a2 = id(id(null)); // error String a3 = id(a3 = id(null)); // ok } <T> T id(T t) { return t; } 「制約 null << T のとき、Tに課せられる制約」を</t></null>…
Java言語仕様はまとまってなくて情報が点在している気がする。ということでメモ。
じぶんめも。
と考え中
風邪引いた。http://d.hatena.ne.jp/nowokay/20090308 をみてて思ったのですが、id:SiroKuro さんが議論していたことは前提 クラスの定義がまずある 任意のクラスの定義Dに対し、型type(D)が定義される 任意のクラスの定義Dに対し、クラスclass(D)が定義され…
「クラスは型である」は間違いである - SiroKuro Pageを読んで少し考えてみた。とりあえず、私のボキャブラリでは「値」がないと型を説明できなかった。まずは、値と型の関係を定義する。 すべての値は型をもつ 型はその値に対する操作に制約を課す 型はその…
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6806876 javacでヒープ汚染せずに代入文だけでクラッシュ - しげるメモのバグレポ送ったら登録されてた模様。コンパイラのカテゴリとして送ったはずなのに、JavaのSpecificationのバグとして登録されて…
Eclipse Ganymedeでテンプレートがかなり便利になりました。 具体的には コンテキストが細かく指定できるようになった Java/JavadocだけじゃなくてJava statements, Java type membersとか 変数の属性が指定できるようになった 引数とか型とか 別のところに…
寝ようと思ったら思いついた。 public class Main { public static void main(String...args) { Comparable[] c = method(1, 1L); } static <T> T[] method(T...ts) { return ts; } } これ、javacで警告でないけど実行するとClassCastException発生。言語仕様違</t>…
権利者側は2008年12月に、ニワンゴの動画投稿サイト「ニコニコ動画」にあるアンケート機能「ニコ割アンケート」を用い、補償金制度に関する調査を実施。これによると、私的録音に用いる機器はパソコンが72.4%と多く、これを基に試算すると「11〜39歳の個人…
土曜日から気管にくる風邪を患ってしまい、気管支炎でおとなしくしてます。Genericsについてまとめたエントリでも書こうかなと思ってJavaの入門書をいくつか流し読みしてみたのですが、なんかGenericsをみんないっせいにスルーしてますね…。やっぱり敬遠され…
型推論の正解が分からない - しげるメモからの派生。型推論で出現する無限型の取り扱いについて、SunのjavacとEclipseのJDTで微妙に動きが違う。
自分めも。だけどわかる人教えてください。 public static void main(String...args) { Integer a = 1; Long b = 2; Object result = method(a, b); // resultの型は? } static <T> T method(T a, T b) { return null; } このmethod(a, b)の型推論で、Tはどの</t>…
オーバーライドの仕組みをサンプルで - しげるメモでオーバーライドをやったので、今回はオーバーロードについて自作してみます。 (一応)オーバーロードの仕組みを説明しておくと、Javaでは同じ名前の引数が異なるメソッドを同じクラスに複数定義できます。 …
ここでよく取り扱ってるんで、まとめがてらちゃんと解説。Java言語仕様第3版のCHAPTER 5: Conversions and Promotionsを簡単にまとめたものだと思ってください。
酒の肴くらいにしかならない豆知識。メソッド呼び出し時の型推論とか - しげるメモの知識が前提のネタです。下記のコードはjavacとJDTで動きが違います。 public class Assignable { public static void main(String[] args) throws Throwable { throw get()…
自分めも。途中からメソッド呼び出し時の型推論についての話題になっても気にしない。タイトルも直した。
自分めも。
オーバーライドの仕組みを紹介するために、Javaでクラスベースのオブジェクト指向の仕組み(オーバーライドメソッドの動的束縛部分のみ)を簡単に作ってみる。