2012年6月26日火曜日

Javaのジェネリクス

よく使ってるけどイマイチわからん。

特に

<? super Hoge>

というのがわからん。

…と思ってたのだけど、少しわかってきた。ような。


  1. <? super Hoge>型にはHogeかそのスーパークラスが代入できる
    1. <? extends Hoge>型にはHogeかサブクラスしか代入できない
  2. 受けた側では、Hogeかそのサブクラスを代入できる
    1. <? extends Hoge>で受けるとnullしか代入できない
    2. <Hoge>で受けると同じくHogeとサブクラスを代入できる
  3. 渡した側は、少なくともHoge型として扱えるものが代入されるとわかる

要は、を使うのはたぶん、引数のリストに何か詰めて返すような処理でかつ、型を現在わかる最上位で固定したくない場合、のような、普通はあまり必然性が高くなさそうな状況ということでオーケーなんだろか。下限が決まらんということはあっても上限が決まらんということはそう多くない気がするが。…絶対ないとも言えないのはわかるけど。スーパープログラマには必要なアレなのかね?


↓確認コード。素人ぽい?まあ、そりゃ親切のためだよ、きっと。


import java.util.ArrayList;
import java.util.List;

public class Generics {
 public static void main(String[] arg){
  List<Monkey> monkeys = new ArrayList<Monkey>();
  //addTo(monkeys);//compile error. 行けそうなものだが行けない
  //addTo_super(monkeys);//compile error. superじゃないし
  addTo_extends(monkeys);//メソッド内でmonkeysにnullしかadd出来ないが
  
  
  List<Animal> animals = new ArrayList<Animal>();
  addTo(animals);
  addTo_super(animals);
  addTo_extends(animals);
  
  //List<Creature> creatures = l;//通常の変数のようにサブクラスに代入できない
  List<Creature> creatures = new ArrayList<Creature>();
  //addTo(creatures);//compile error
  addTo_super(creatures);//Animalかサブクラスが足される。Objectなどは来ない。
  //addTo_extends(creatures);//compile error
 }
 
 static void say(List<? extends Animal> l){
  for(Object a : l) ((Animal)a).say();
 }
 
 static void addTo(List<Animal> l){
  l.add(new Animal());
  l.add(new Monkey());
  l.add(new Human());
  //l.add(new Creature());//compile error
 }
 // メソッド内では型はAnimal以下限定。外では上限定。
 static void addTo_super(List<? super Animal> l){
  l.add(new Animal());
  l.add(new Monkey());
  l.add(new Human());
  //l.add(new Creature());//compile error
 }
 
 // 何も足せない
 static void addTo_extends(List<? extends Animal> l){
  //l.add(new Animal());//compile error
  //l.add(new Monkey());//compile error
  //l.add(new Human());//compile error
  //l.add(new Creature());//compile error
 }
}


class Creature{
 void say(){
  System.out.println("Yes, I am a(n) " + this.getClass().getSimpleName());
 } 
}
class Animal extends Creature{
}
class Monkey extends Animal{
 
}

class Human extends Monkey{
 
}

2012年6月13日水曜日

6月のシカゴ、青い空と湖水、赤い月、そしてピザ

 突然だが、ミシガン湖からの夕日。


…て、サンセットクルーズ(45分で15ドル前後だった)しちゃってるぜ?I was there on businessのはずなのにな!

ということで、幸いなことに業界で世界最大とされるカンファレンスがシカゴで開催され
ていたため、シカゴに出張してきました。

行く前は特に予備知識もなく、有名だけど何があるってわけでもない場所だよなあ、なんて思っていたのだけど、行ってみたらこれが実に面白かった。



ミシガン湖の北西岸にいたから、夜には湖の水平線から昇る月が見え、これが朝日と同じで水平線ギリギリの時は真っ赤で奇麗なのだわ。でも23時頃だったので、チーズ食いながら写真を撮っていたら、マウンテンバイクに乗ったカッチョ良いポリスメン集団に「ガラゴー」だか何だか言われて追い出された。随分と治安の良い国である(本気で言ってない。ダウンタウンだからだろう)。




ちなみにシカゴは、スカイスクレイパー…おっと、高層建築の発祥の地だらしい。Congress Plaza Hotelという古臭い(1890年代建築だそうだ)ホテルに泊まっていたのだが、このホテルが実にロケーションが良く(そして素晴らしいのはロケーションだけとも言われる)、歩いて数分のところにシカゴ建築財団(Chicago Architecture Foundation)があり、空き時間に徒歩でのビル見学ツアーに参加した。アーキテクチャという概念は、建築界から輸入されてソフトウェア業界でも重要な概念であるから、これは見ておかないといけませんなと。

低層建築から高層建築への移り変わりと、同時にギリシャ/ローマ様式のネオクラシカルからモダンへ、その後ポストモダンへと移行する歴史を見た。…まあ、建築のことはよくわからんけどな。



ということで、いくつかハイライトを。

シカゴピザ


名物、シカゴピザである。

一応、サイズがいろいろあり、スモールは1〜2人用と書いてあった。だが、いくらアメリカ人でもこんなの一人で食うのが標準のワケはねえ。これ直径、普通に25cmくらいはあるからね。

ただ、味は実はさっぱり系だった。スペシャルというのを頼んだのだが、マッシュルームとオニオンとピーマンが具のほとんどで、チーズはたぶんモツァレラオンリーだから、意外とあっさり食えてしまう。結局二人で二切れ残したが、事前にチキンウィングとかモツァレラトマトとかいろいろ食ってなければ食えたかも。頑張れば。

ちなみに、この前の日には、リブステーキを食った。でかくて甘辛で美味かった。

そして、この後の日には、ホットドッグを食った。でっかいピクルス添えである。

ホットドッグ
しかも、シカゴ・リバーウォーク沿いのオープンカフェでだ。オシャレ過ぎる。

ビールは主に、Blue Moonと、Goose Islandを飲んでいた。Goose IslandはSummer Timeという奴が一番うまかった。

参加したカンファレンスのパーティでは、当然のようにローストビーフをやたら食ったので、もうこれでアメリカで食うべきものは全部食ったと言えるだろう(笑)。

有名な豆も見たし。

シカゴ・ビーン


海にしか見えないミシガン湖は走ったし。船まで乗っちゃったし。青いなあ。やたら青いな。日本で言えば白水湖とかと同じく、酸性の鉱物でも入ってんだろうな。



ハーバーにはスモールマウスっぽい形のバスもいたし。…釣り道具を持って行くべきだったか…。


天文台裏のハーバー

建築の見学もしちゃったし。これはあれだ。ネオクラシカルか。




それにしてもセグウェイが多い街であった。ほとんどは観光用のレンタルなのだが、これはホテルの向かいの大学の学生のマシンのようだった。


クロカン仕様のセグウェイX2

…そろそろ、エクストリーム・セグウェイが出現する頃合いかも知れん。


ちなみに、もちろん遊んでばかりいたわけではない。

今日も部下どもが帰ってから、23時前まで、既に数万字に達しているであろう出張レポートの続きを書いていた。ま、そういうの書くのも嫌いじゃないんだけどな。

2012年6月11日月曜日

実に気持ちの良いランだった

先週末の話だが。

他人と一緒に走ったのも初めてだったが、なんと言ってもロケーションがな。

水辺はやはり気持ちいい。


うひょ。カッチョいいことしてるね俺。

2012年6月1日金曜日

とか言ってたら、わさわさ実がなって来た

日ごとにぐいぐいと実が増えて大きくなっている。来週中には食えるんじゃないかという気がするのだが、来週いっぱいは出張だ…。