More Related Content
More from Hiroki Mizuno (20)
Java基礎
- 6. ←Java8
←Java1.0
6
http://www.flickr.com/photos/deming0131/5879385869/in/photostream/
- 18. ArrayList xs =
new ArrayList();
xs.add((Object)"foo");
String str =
(String)xs.get(0);
8
- 19. ArrayList xs =
new ArrayList();
ヤバイ
xs.add((Object)"foo");
ヤバイ
String str =
(String)xs.get(0);
8
- 22. ←C# 2.0
←C# 1.0
(CLR2.0)
(CLR1.0)
C#(.NET)
11
http://www.flickr.com/photos/ihorner/65073758/
- 25. なぜJavaのジェネリクスは
特殊なのか
Javaのジェネリクスはイ
レージャー方式
ランタイムはそのまま
非ジェネリクスに変換し
14
- 33. FJ(Featherweight Java)
最小限のJavaサブセット
•クラス定義
あるもの ないもの
•アクセス制御(e.g.
•フィールド定義
public, private)
•メソッド定義 •static
•オーバーライド •final
•リフレクション
•キャスト
22
- 36. FGJ
FJ + ジェネリクス
•クラス定義 + ジェ
あるもの ないもの
ネリクス •アクセス制御(e.g.
•フィールド定義 public, private)
•static
•メソッド定義 + •final
ジェネリクス •リフレクション
•オーバーライド 25
- 40. class PointA extends Point<A>{
PointA(A x) { super(x); }
PointA update(A y) {
return new Point<T>(y);
}
}
class PointA extends Point{
PointA(Object x) { super(x); }
Point update(Object y) {
return new PointA((A)y);
}
}
29
- 41. class PointA extends Point<A>{
PointA(A x) { super(x); }
PointA update(A y) {
return new Point<T>(y);
}
}
A→Object
PointA→Point
class PointA extends Point{
PointA(Object x) { super(x); }
Point update(Object y) {
return new PointA((A)y);
}
}
29
- 42. class PointA extends Point<A>{
PointA(A x) { super(x); }
PointA update(A y) {
return new Point<T>(y);
}
}
A→Object
PointA→Point
class PointA extends Point{
PointA(Object x) { super(x); }
Point update(Object y) {
return new PointA((A)y);
}
} キャストを挿入
29
Editor's Notes
- \n
- \n
- \n
- &#x30FB;&#x6700;&#x8FD1;&#x3001;&#x958B;&#x767A;&#x8005;&#x5411;&#x3051;&#x306E;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30C4;&#x30FC;&#x30EB;&#x3067;&#x3042;&#x308B;AS&#x306E;&#x6700;&#x65B0;&#x7248;&#x3092;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3057;&#x307E;&#x3057;&#x305F;\n&#x30FB;&#x30B3;&#x30FC;&#x30C9;&#x30CF;&#x30A4;&#x30E9;&#x30A4;&#x30C8;&#x3068;&#x304B;Redmine&#x9023;&#x643A;&#x304C;&#x3042;&#x308B;&#x306E;&#x3067;&#x958B;&#x767A;&#x8005;&#x306E;&#x4EBA;&#x306F;&#x4F7F;&#x3046;&#x3068;&#x3044;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;\n
- \n
- 12&#x5E74;&#x3067;&#x3044;&#x308D;&#x3044;&#x308D;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;\n&#x4F1A;&#x793E;&#x3082;&#x304B;&#x308F;&#x3063;&#x305F;&#x3057;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x5F53;&#x7136;&#x3001;&#x6700;&#x521D;&#x304B;&#x3089;&#x4ECA;&#x306E;Java&#x3060;&#x3063;&#x305F;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;\n&#x9806;&#x6B21;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x3066;&#x3044;&#x3063;&#x305F;\n--(&#x5168;&#x90E8;&#x3060;&#x3057;&#x3066;&#x304B;&#x3089;)\n&#x6700;&#x5927;&#x306E;&#x5909;&#x66F4;&#x306F;Java 5&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002; &#x4ECA;&#x65E5;&#x306E;&#x8A71;&#x984C;&#x3067;&#x3082;&#x3042;&#x308B;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x304C;&#x5C0E;&#x5165;&#x3055;&#x308C;&#x305F;\n
- &#x3053;&#x306E;&#x30AD;&#x30E3;&#x30B9;&#x30C8;&#x306E;&#x3042;&#x305F;&#x308A;&#x304C;&#x30E4;&#x30D0;&#x30A4;&#x3002;\n&#x5927;&#x4E8B;&#x306A;&#x3053;&#x3068;&#x306A;&#x306E;&#x3067;&#x3082;&#x3046;&#x4E00;&#x5EA6;&#x3044;&#x3044;&#x307E;&#x3059;&#x3002;&#x30E4;&#x30D0;&#x30A4;&#x3002;\n
- \n
- javac -target jsr14 Foo.java\n
- C#&#x3068;&#x3046;&#x304B;.NET&#x3060;&#x3068;&#x30B8;&#x30A7;&#x30CD;&#x30EA;&#x30AF;&#x30B9;&#x3092;&#x5C0E;&#x5165;&#x3059;&#x308B;&#x969B;&#x306B;CLR&#x3092;&#x4F5C;&#x308A;&#x306A;&#x304A;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n
- \n
- C++&#x306F;&#x3088;&#x304F;&#x308F;&#x304B;&#x308A;&#x307E;&#x305B;&#x3093;&#x3002;\n
- &#x30FB;&#x30DE;&#x30FC;&#x30C1;&#x30F3;&#x30AA;&#x30C7;&#x30B9;&#x30AD;&#x30FC;&#x5148;&#x751F;\n
- \n
- \n
- &#x3042;&#x3001;Java&#x306E;&#x8A71;&#x306F;&#x3053;&#x3053;&#x3067;&#x7D42;&#x308F;&#x308A;&#x3067;&#x3059;&#x3002;\n
- \n
- \n
- \n
- \n
- Featherweight&#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x3068;&#x306F;&#x7121;&#x95A2;&#x4FC2;\n&#x6700;&#x5C0F;&#x9650;&#x306F;&#x30B3;&#x30EC;&#x3067;&#x3059;&#x3002;&#x7570;&#x8AD6;&#x306F;&#x53D7;&#x3051;&#x4ED8;&#x3051;&#x307E;&#x3059;&#x3002;\n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- FJ&#x306F;&#x975E;&#x5E38;&#x306B;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x306A;&#x306E;&#x3067;&#x4ED6;&#x306E;&#x3053;&#x3068;&#x306B;&#x3082;&#x3064;&#x304B;&#x3048;&#x307E;&#x3059;\n
- \n
- &#x6B7B;&#x306E;&#x4E88;&#x611F;&#x3057;&#x304B;&#x3057;&#x306A;&#x3044;\n
- &#x6B66;&#x5668;&#x3092;&#x6E96;&#x5099;&#x3057;&#x3066;&#x304A;&#x3053;&#x3046;\n&#x8A00;&#x3044;&#x63DB;&#x3048;&#x308C;&#x3070;&#x8A3C;&#x660E;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308B;\n
- &#x6C34;&#x639B;&#x3051;&#x8AD6;&#x3092;&#x3042;&#x308B;&#x7A0B;&#x5EA6;&#x9632;&#x6B62;&#x3067;&#x304D;&#x308B;\n
- \n