Java Generics Hell アドベントカレンダー 6日目。 前回(5日目) パラメタライズドタイプ 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。ここまで話の簡単のためにいろいろ端折って書いてきているのだが、徐々に詳細を書かねばなるまい。同時に…
Java Generics Hell アドベントカレンダー 5日目。 1日目 Java Generics Hell 序章 2日目 オブジェクト指向 3日目 リスコフの置換原則 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 パラメタライズドタイプ Javaのジェネリクス周りは一緒くた…
Java Generics Hell アドベントカレンダー 4日目。 1日目 Java Generics Hell 序章 2日目 オブジェクト指向 3日目 リスコフの置換原則 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。前回は継承のある型システムで重要な「リスコフの置換原則」…
Java Generics Hell アドベントカレンダー 3日目。 1日目 Java Generics Hell 序章 2日目 オブジェクト指向 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。前回はオブジェクト指向の中核が(継承に限定せず幅広い意味での)ポリモーフィズムで…
Java Generics Hell アドベントカレンダー 2日目。 1日目 Java Generics Hell 序章 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。前回は与太話だった。ジェネリクスの話をする前にOOP(オブジェクト指向プログラミング)について整理しておか…
気合が続くか分からない Java Generics Hell アドベントカレンダー 1日目。読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 導入 JavaのジェネリクスはJavaが設計された当初(Javaは1995年に発表されている)から検討はされてはいたものの、実装が…
聞くところJava本格入門(通称アクロ本)の評判がすこぶる良いようだ。1995年にJavaが発表されてから随分と経つ。Javaのメジャーバージョンも8を数え、9がリリースされようとしている。1990年代にはこの新しい言語についてたくさんの技術書が発行されたが、…
Javaのジェネリクスでしばしば話題に上がる「イレイジャ」について整理しておきたい。イレイジャについては僕もいろいろと誤解しており、過去に誤った発言をしている。本エントリはその贖罪として書かれたものである。「イレイジャ」という方式についてはネ…
入門書ではあまりとりあげられない部分を解説するコンセプトの「入門書が教えてくれないJava」シリーズの第二弾。前回は変数についてだった。今回はそのスコープについて取り上げたい。 スコープとは スコープとは大雑把に言えば変数やメソッドなどが見える…
春なのでJava入門的なことを書こうと思い立ったので、入門書ではあまりとりあげられない部分を解説するコンセプトの入門記事を書いてみようと思う。(←ひねくれ者)対象読者としては、Java言語の基礎を学んだがもう一歩踏み込んだ話が知りたいぐらいの初学者〜…
すいません。完成まで漕ぎ着けれませんでした。本稿はセミコロンレスJava Advent Calendar 2015の25日目です。セミコロンレスJavaについて簡単に説明すると、Javaの構文上のセミコロンを用いないで標準APIの範囲でプログラミングをするにはどうしたら良いか…
富山で寒ブリを買い付けて東京に運び、料理ハンズオンというか、要するにホームパーティーをやろうという企画の振り返り。あくまでもエンジニアの個人的なホームパーティーなのでその点はひとつご理解を。kamekoopa氏の振り返りも参考に。本稿のブリの写真は…
java.util.concurrent.FutureTaskのコンストラクタの定義が public FutureTask(Callable callable) http://docs.oracle.com/javase/jp/8/docs/api/java/util/concurrent/FutureTask.html#FutureTask-java.util.concurrent.Callable- とCallable<V>となっていてC</v>…
メソッド内部で任意の型のインスタンスを生成してオブジェクトを返す場合 public static <T> T hoge(Class<T> clazz) { try { return clazz.newInstance(); } catch (ReflectiveOperationException e) { throw new RuntimeException(e); } } といったようにjava.la</t></t>…
ある型のインスタンスを受け取り、Listにして返すメソッドを考えよう。 public static <T> List<T> wrap(T value) { List<T> list = new ArrayList<T>(); list.add(value); return list; } このとき、型変数はメソッドのIn / Outで型の関連を表現できさえすればよいので</t></t></t></t>…
Javaのジェネリクスについて考察するのに丁度良いテーマを見つけたので忘れないうちに書いておく。Map を Mapに変換するメソッドを作るという話題。 public static <K,V> Map<V,K> swap1(Map<K,V> origin) { // 略 } 単にMapからMapに変換するなら上記のようなメソッドシグ</k,v></v,k></k,v>…
富山合同勉強会 .NET & Java 〜ぶりしゃぶで休もう〜 が1/31(土)に開催されました。.NETのセッションとJavaのセッションを2部屋並行してやるという富山ではなかなか例を見ない大規模な勉強会です。いろんな話題があって良かったですね。僕はスタッフとしてJa…
Javaのgetter/setterのお話。 僕は当時を語るには若すぎるのだけど、過去を振り返って書いてみる。当時を知る人は誤りがあれば指摘してほしいし、情報があればコメントなりトラックバックなりして欲しい。前世紀の話というのは今となっては探すことがなかな…
今回はJavaの型システムのコンストラクタについて考えてみたい。Javaの型システム、あるいはJavaのオブジェクト指向において、コンストラクタという存在は特殊な存在だ。コンストラクタ内からはそのクラスのインスタンスフィールドにアクセスできる。これは…
http://aoking.hatenablog.jp/entry/20100427/1272326219での主張は public class Sample { public static void main(String[] args) { List<Integer> list = getList(); System.out.println(list); } public static <T> List<T> getList() { List<T> list = new ArrayList<T>(); </t></t></t></t></integer>…
さて、前回のエントリを枕として、JavaでTuple的なモノのサンプルを書いたのだけど、汎用のTupleというか、値を2つだけとるPairとでも名乗るべきモノだった。みなさん御存知の通り、型変数は可変長に宣言することができない。そもそもJavaの文法的には型変…
コードを書いているとたまにふたつのIteratorをいっしょに回すコードを書くはめになる。 /** ふたつのItaratorを並べて回すサンプル */ static boolean compare1(List<String> list1, List<Integer> list2) { if (list1.size() != list2.size()) { throw new IllegalArgumentE</integer></string>…
IT勉強会はなにも東京ばかりで開催されているわけではない。 地方の勉強会に参加するのであれば、ついでに観光地を巡ったり、その土地の美味しいモノを食べたいというのが人情である。本エントリでは富山の勉強会に来た際に食べるべきものを紹介する。 氷見…
上司「Java書けるんなら当然JavaScript呼び出せるよね?さっさとやっておいて」 JavaからJavaScriptを呼び出す Java 6 からスクリプトAPIを通じてスクリプト言語を呼び出すことができる。Java標準でJavaScriptのエンジン Rhinoが組み込まれているので特にイ…
Javaのジェネリクスの話題のひとつにnew T()したいができないので困る、というテーマがある。 先日のセッションではこの対策についても簡単に述べたが今日はそのまとめ。まず第一に疑うべきは本当にnew T()する必然性があるか?というのが持論だが、ある種の…
JJUG CCC 2013 Fallの懇親会のLT(ライトニングトーク)でSemicolonless Java8について発表しました。Semicolonless Java とはエクストリームプログラミング(要するにプログラミングの縛りプレイ)でルールは以下のとおりです。 セミコロンを用いてはいけない …
資料はslideshareに上げました。ジェネリクスの基礎と クラス設計への応用 ジェネリクスの基礎と クラス設計への応用 from nagise 内容はジェネリクスの基礎的なところから、話題を網羅する感じでかいつまんで紹介といったところです。 セッションの元ネタは…
前回から随分と間が開いてしまった。Javaのジェネリクスはイレイジャ方式だけどもクラスにバインドした型の情報が残る場合があるんだよシリーズの第2弾である。具体的にどういう場合にバインドした型が残るのかという話だが、端的に列挙すると以下のものであ…
前稿 ジェネリクスのカリー化 - プログラマーの脳みそ では、Javaの内部クラスを利用して複数の型変数をもつジェネリックなクラスをカリー化することができるという話をした。では以前のJavaによる高階型変数の実装 - プログラマーの脳みそで用いた手法はカ…
関数を扱えるだけでは、モナドを表現するには不十分過ぎる - xuwei-k's blogを見て、言語の型システムの表現力とその限界とはなんなんだろうということをモヤモヤと考えていた。ここで話題になっているのは型変数を持つ型変数という話題である。これを便宜的…