言語仕様
動機 プリミティブ型の式(たとえば数値リテラル)はオブジェクトではないので、メソッドを呼び出すことはできません。 // コンパイルエラー 100.intValue(); そこで簡単な式でボクシング変換を起こす方法をいくつか紹介します。 たとえばメソッドチェイン中で…
変数に値を代入する際に、アンボクシング→プリミティブ拡大変換は起こる*1が プリミティブ拡大変換→ボクシングは起こらないので、 intはLongになるがIntegerはlongにならない。 @SuppressWarnings("unused") public static void main(final String[] args) {…
概要 ジェネリッククラス/インターフェースに実型引数を与えた際のメンバの型の仕様 http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.5.2 の勉強。よく分かっていない 本文 仮型引数に実型引数を「渡す」ことはinvocationでした。→ 実型…
概要 null typeをちゃんと読む 仕様 Java言語仕様にはnull typeがあります。 There is also a special null type, the type of the expression null (§3.10.7, §15.8.1), which has no name. http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#j…
言語仕様にintersection typeは型変数のupper boundと似ているが、違うと書いてあるのでメモ。 型変数のupper boundはintersection typeをもたらすが、intersection typeの方がより広いものを含むということらしい。 An intersection type takes the form T1…
先日のエントリー 仮型引数と実型引数の混同に関する考察 で仮型引数 (type parameter) と実型引数 (type argument) の話をしました。 では、実型引数を仮型引数に「渡す」ことは仕様では何と呼ぶのでしょうか。 The type argument list denotes a particula…
Javaジェネリクス初心者は と Hoge>の違いが分からない! とよく混乱します。前者はtype parameter*1として、後者はtype argumentとして使われる表現で、出てくる文脈が違うものです。では、なぜこの2つは混同されるのでしょうか? 一つの原因はどちらも<>と…
private(package private、protectedでも可能)メンバクラスをそれよりも可視性の高いアクセス修飾子をもつメソッドの戻り値型や引数型にすると、使う側で「何だこの型は?」という不思議なメソッド*1になる。簡単な実験で、スーパークラスやインターフェース…
upper bound, lower boundは順序集合の文脈で「上界」「下界」と訳されます。 参考: Wikipedia http://ja.wikipedia.org/wiki/%E9%A0%86%E5%BA%8F%E9%9B%86%E5%90%88 ところがJavaの型の文脈では「上限(境界)」「下限(境界)」と訳されます。 参考: TypeVaria…
clone()の戻り値型は、共変戻り値型 (covariant return type) が使えることを利用して、定義されたクラスの型にするのがよいとされている。参考: http://www.ne.jp/asahi/hishidama/home/tech/java/clone.html#h2_covariantでは、コピーをリストで複数返した…
Javaでよく遊んでいるのでメモ。 void.classが取れるならvoid[].classも取れるのでは?と思ったが取れなかった。 リフレクションでもvoid配列は作れなかった。 package test; import java.lang.reflect.Array; public class VoidArrayTest { public static v…
概要 Coqの些末な話。 proj2_sigの定義が読めなかったのでletについて調べた。 (* proj2_sig = fun (A : Type) (P : A -> Prop) (e : sig P) => let (a, b) as e0 return (P (proj1_sig e0)) := e in b : forall (A : Type) (P : A -> Prop) (e : sig P), P …