SlideShare ist ein Scribd-Unternehmen logo
1 von 33
JSR 334
Project Coin
   開発部
  齋藤 輝明
アジェンダ
1. switch 文で String が使用できる
2. 2進数表現とアンダースコア区切り
3. ダイヤモンド
4. 例外のマルチキャッチ
5. 例外の再送
6. リソースを含むtry文
7. Generic を使用している可変長引数
アジェンダ
1. switch 文で String が使用できる
2. 2進数表現とアンダースコア区切り
3. ダイヤモンド
4. 例外のマルチキャッチ
5. 例外の再送
6. リソースを含むtry文
7. Generic を使用している可変長引数
JDK6 までの switch 文で使用できる
型
•   整数型
    o char
    o byte
    o short
    o int
    o 上記の型に対応するラッパークラス



•   enum 型
JDK7の switch 文で使用できる型
•   整数型
    o char
    o byte
    o short
    o int
    o 上記の型に対応するラッパークラス



•   enum 型

•   String 型
JDK6
if (animal.equals("dog")) {
    ...
} else if (animal.equals("cat")) {
    ...
} else {
    ...
}
JDK7
switch (animal) {
  case "dog":
    ...
    break;
  case "cat":
    ...
    break;
  default:
    ...
    break;
}
アジェンダ
1. switch 文で String が使用できる
2. 2進数表現とアンダースコア区切り
3. ダイヤモンド
4. 例外のマルチキャッチ
5. 例外の再送
6. リソースを含むtry文
7. Generic を使用している可変長引数
JDK6
int decimal = 10; // 10進数
int octal = 012; // 8進数
int hexadecimal = 0xA; // 16進数
JDK7 (1/2)
int decimal = 10; // 10進数
int octal = 012; // 8進数
int hexadecimal = 0xA; // 16進数
int binary = 0b1010; // 2進数
JDK7 (2/2)
// アンダースコア
int million = 1_000_000;
byte b = (byte) 0b0101_1111;



int errorOctal = 0_12; // コンパイルエラー
int errorHexadecimal = 0x_A; // コンパイルエラー
int errorBinary = 0b_1010; // コンパイルエラー
アジェンダ
1. switch 文で String が使用できる
2. 2進数表現とアンダースコア区切り
3. ダイヤモンド
4. 例外のマルチキャッチ
5. 例外の再送
6. リソースを含むtry文
7. Generic を使用している可変長引数
JDK6
Map<String, List<String>> map =
 new HashMap<String, List<String>>();
JDK7
// <> ダイアモンド!
Map<String, List<String>> map = new HashMap<>();
アジェンダ
1. switch 文で String が使用できる
2. 2進数表現とアンダースコア区切り
3. ダイヤモンド
4. 例外のマルチキャッチ
5. 例外の再送
6. リソースを含むtry文
7. Generic を使用している可変長引数
JDK6
try {
   ...
} catch (FileNotFoundException e) {
   ...
} catch (ParseException e) {
   ...
}
JDK7
try {
   ...
} catch (FileNotFoundException | ParseException e) {
   ...
}
アジェンダ
1. switch 文で String が使用できる
2. 2進数表現とアンダースコア区切り
3. ダイヤモンド
4. 例外のマルチキャッチ
5. 例外の再送
6. リソースを含むtry文
7. Generic を使用している可変長引数
JDK6
void execute() throws ChildException {
  try {
     throw new ChildException();
  } catch (ParentException e) {
     throw e; // コンパイルエラー
  }
}
JDK6
void execute() throws ParentException {
  try {
     throw new ChildException();
  } catch (ParentException e) {
     throw e; // エラーにならない
  }
}
JDK7
void execute() throws ChildException {
  try {
     throw new ChildException();
  } catch (ParentException e) {
     throw e; // エラーにならない!
  }
}
アジェンダ
1. switch 文で String が使用できる
2. 2進数表現とアンダースコア区切り
3. ダイヤモンド
4. 例外のマルチキャッチ
5. 例外の再送
6. リソースを含むtry文
7. Generic を使用している可変長引数
JDK6
BufferedReader reader = null;
try {
   reader = new BufferedReader(
       new FileReader("readTextFile.txt"));
   ...
} finally {
   if (reader != null) {
       reader.close();
   }
}
JDK7
try (BufferedReader reader = new BufferedReader(
       new FileReader("readTextFile.txt"))) {
   ...
}


// BufferedReader は java.lang.AutoCloseable を実装し
ている
JDK7
try (BufferedReader reader = new BufferedReader(
       new FileReader("readTextFile.txt"));
       BufferedWriter writer = new BufferedWriter(
       new FileWriter("writeTextFile.txt"))) {
   ...
}
java.lang.AutoCloseable を
継承および実装しているもの
•   java.beans.XMLDecoder   •   java.sql.ResultSet
•   java.beans.XMLEncoder   •   java.sql.Statement
•   java.io.Closeable       •   java.nio.channels.FileLock
•   java.io.ObjectInput     •   javax.sound.midi.MidiDevic
•   java.io.ObjectOutput        e
•   java.sql.Connection     •   javax.sound.midi.Receiver
                            •   javax.sound.midi.Transmitt
                                er
                            •   javax.sound.sampled.Line
アジェンダ
1. switch 文で String が使用できる
2. 2進数表現とアンダースコア区切り
3. ダイヤモンド
4. 例外のマルチキャッチ
5. 例外の再送
6. リソースを含むtry文
7. Generic を使用している可変長引数
JDK6
public static void main(String[] args) {
  List<String> list = toList("hoge", "piyo");
}

private static <T> List<T> toList(T... args) {
  List<T> list = new ArrayList<T>();
  for (T t : args) { list.add(t); }
  return list;
}
JDK7
public static void main(String[] args) {
  List<String> list = toList("hoge", "piyo");
}

private static <T> List<T> toList(T... args) { // 警告!
  List<T> list = new ArrayList<T>();
  for (T t : args) { list.add(t); }
  return list;
}
警告の理由
•   Type safety: Potential heap pollution via
    varargs parameter args



private static <T> List<T> toList(T... args) {
  Object[] objectArray = args;
  objectArray[1] = new Integer(200);
  ...
}
これも警告出ちゃうの?
•     public static <T> List<T> java.util.Arrays.asList(T...
    a)
•     public static <T> boolean
    java.util.Collections.addAll(Collection<? super T> c,
    T... elements)
•     public static <E extends Enum<E>>
    java.util.EnumSet<E> EnumSet.of(E first, E... rest)
•     protected final void
    javax.swing.SwingWorker.publish(V... chunks)
JDK7
public static void main(String[] args) {
  List<String> list = toList("hoge", "piyo");
}


@SafeVarargs
private static <T> List<T> toList(T... args) {   // 警告なし
  List<T> list = new ArrayList<T>();
  for (T t : args) { list.add(t); }
  return list;
}
お わ   り

Weitere ähnliche Inhalte

Was ist angesagt?

Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼうVienosNotes
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java心 谷本
 
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition心 谷本
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Takuya Tsuchida
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺちdo_aki
 
リーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめましたリーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめましたTakumi Sato
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについてShoichi Takagi
 
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma次世代DaoフレームワークDoma
次世代DaoフレームワークDomaToshihiro Nakamura
 
リーダブルコード勉強会
リーダブルコード勉強会リーダブルコード勉強会
リーダブルコード勉強会TAKUYA YAMAMOTO
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
JavaScript超入門 基礎
JavaScript超入門 基礎JavaScript超入門 基礎
JavaScript超入門 基礎tetsu6
 
コードで感じるKotlin入門
コードで感じるKotlin入門コードで感じるKotlin入門
コードで感じるKotlin入門iPride Co., Ltd.
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用nagise
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 

Was ist angesagt? (20)

Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼう
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
日本語形態素解析
日本語形態素解析日本語形態素解析
日本語形態素解析
 
講座Java入門
講座Java入門講座Java入門
講座Java入門
 
オープンソースソフトウェア検索サーバ Solr入門
オープンソースソフトウェア検索サーバ Solr入門オープンソースソフトウェア検索サーバ Solr入門
オープンソースソフトウェア検索サーバ Solr入門
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java
 
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
 
Php5.4
Php5.4Php5.4
Php5.4
 
リーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめましたリーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめました
 
Introduction Xtend
Introduction XtendIntroduction Xtend
Introduction Xtend
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
 
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
 
リーダブルコード勉強会
リーダブルコード勉強会リーダブルコード勉強会
リーダブルコード勉強会
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
JavaScript超入門 基礎
JavaScript超入門 基礎JavaScript超入門 基礎
JavaScript超入門 基礎
 
コードで感じるKotlin入門
コードで感じるKotlin入門コードで感じるKotlin入門
コードで感じるKotlin入門
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 

Ähnlich wie Project coin

JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid Buck
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へonozaty
 
演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみようTakashi Ishio
 
Java 並行処理の基礎update1
Java 並行処理の基礎update1Java 並行処理の基礎update1
Java 並行処理の基礎update1Kazuhiro Eguchi
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文Appresso Engineering Team
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 
ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件Kazuki MATSUMOTO
 
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Yukiko Kato
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」de:code 2017
 
C# 7・8 の復習
C# 7・8 の復習C# 7・8 の復習
C# 7・8 の復習m ishizaki
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめKazumune Katagiri
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„和弘 井之上
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7Tetsuya Morimoto
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesNoritada Shimizu
 
LLdeade Python Language Update
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language UpdateAtsushi Shibata
 

Ähnlich wie Project coin (20)

Project lambda
Project lambdaProject lambda
Project lambda
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう
 
Java 並行処理の基礎update1
Java 並行処理の基礎update1Java 並行処理の基礎update1
Java 並行処理の基礎update1
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件
 
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
C# 7・8 の復習
C# 7・8 の復習C# 7・8 の復習
C# 7・8 の復習
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめ
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 
LLdeade Python Language Update
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language Update
 

Mehr von Appresso Engineering Team

マルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Executionマルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded ExecutionAppresso Engineering Team
 
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Appresso Engineering Team
 
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42Appresso Engineering Team
 
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40Appresso Engineering Team
 
Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Appresso Engineering Team
 

Mehr von Appresso Engineering Team (20)

20150302 java8 第一回_ラムダ式(1)
20150302 java8 第一回_ラムダ式(1)20150302 java8 第一回_ラムダ式(1)
20150302 java8 第一回_ラムダ式(1)
 
Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目77-78Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目77-78
 
Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75
 
マルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Executionマルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Execution
 
JavaScript 勉強会 ― 型と値
JavaScript 勉強会 ― 型と値JavaScript 勉強会 ― 型と値
JavaScript 勉強会 ― 型と値
 
Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70追加Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70追加
 
Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70
 
Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目66-68Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目66-68
 
Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目71-73Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目71-73
 
Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)
 
Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目63-65Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目63-65
 
Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目60-62Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目60-62
 
Effective java 輪読会 項目57-59
Effective java 輪読会 項目57-59Effective java 輪読会 項目57-59
Effective java 輪読会 項目57-59
 
Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目49-52Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目49-52
 
Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目45-48Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目45-48
 
Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目53-56Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目53-56
 
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44
 
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42
 
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40
 
Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37
 

Project coin

  • 1. JSR 334 Project Coin 開発部 齋藤 輝明
  • 2. アジェンダ 1. switch 文で String が使用できる 2. 2進数表現とアンダースコア区切り 3. ダイヤモンド 4. 例外のマルチキャッチ 5. 例外の再送 6. リソースを含むtry文 7. Generic を使用している可変長引数
  • 3. アジェンダ 1. switch 文で String が使用できる 2. 2進数表現とアンダースコア区切り 3. ダイヤモンド 4. 例外のマルチキャッチ 5. 例外の再送 6. リソースを含むtry文 7. Generic を使用している可変長引数
  • 4. JDK6 までの switch 文で使用できる 型 • 整数型 o char o byte o short o int o 上記の型に対応するラッパークラス • enum 型
  • 5. JDK7の switch 文で使用できる型 • 整数型 o char o byte o short o int o 上記の型に対応するラッパークラス • enum 型 • String 型
  • 6. JDK6 if (animal.equals("dog")) { ... } else if (animal.equals("cat")) { ... } else { ... }
  • 7. JDK7 switch (animal) { case "dog": ... break; case "cat": ... break; default: ... break; }
  • 8. アジェンダ 1. switch 文で String が使用できる 2. 2進数表現とアンダースコア区切り 3. ダイヤモンド 4. 例外のマルチキャッチ 5. 例外の再送 6. リソースを含むtry文 7. Generic を使用している可変長引数
  • 9. JDK6 int decimal = 10; // 10進数 int octal = 012; // 8進数 int hexadecimal = 0xA; // 16進数
  • 10. JDK7 (1/2) int decimal = 10; // 10進数 int octal = 012; // 8進数 int hexadecimal = 0xA; // 16進数 int binary = 0b1010; // 2進数
  • 11. JDK7 (2/2) // アンダースコア int million = 1_000_000; byte b = (byte) 0b0101_1111; int errorOctal = 0_12; // コンパイルエラー int errorHexadecimal = 0x_A; // コンパイルエラー int errorBinary = 0b_1010; // コンパイルエラー
  • 12. アジェンダ 1. switch 文で String が使用できる 2. 2進数表現とアンダースコア区切り 3. ダイヤモンド 4. 例外のマルチキャッチ 5. 例外の再送 6. リソースを含むtry文 7. Generic を使用している可変長引数
  • 13. JDK6 Map<String, List<String>> map = new HashMap<String, List<String>>();
  • 14. JDK7 // <> ダイアモンド! Map<String, List<String>> map = new HashMap<>();
  • 15. アジェンダ 1. switch 文で String が使用できる 2. 2進数表現とアンダースコア区切り 3. ダイヤモンド 4. 例外のマルチキャッチ 5. 例外の再送 6. リソースを含むtry文 7. Generic を使用している可変長引数
  • 16. JDK6 try { ... } catch (FileNotFoundException e) { ... } catch (ParseException e) { ... }
  • 17. JDK7 try { ... } catch (FileNotFoundException | ParseException e) { ... }
  • 18. アジェンダ 1. switch 文で String が使用できる 2. 2進数表現とアンダースコア区切り 3. ダイヤモンド 4. 例外のマルチキャッチ 5. 例外の再送 6. リソースを含むtry文 7. Generic を使用している可変長引数
  • 19. JDK6 void execute() throws ChildException { try { throw new ChildException(); } catch (ParentException e) { throw e; // コンパイルエラー } }
  • 20. JDK6 void execute() throws ParentException { try { throw new ChildException(); } catch (ParentException e) { throw e; // エラーにならない } }
  • 21. JDK7 void execute() throws ChildException { try { throw new ChildException(); } catch (ParentException e) { throw e; // エラーにならない! } }
  • 22. アジェンダ 1. switch 文で String が使用できる 2. 2進数表現とアンダースコア区切り 3. ダイヤモンド 4. 例外のマルチキャッチ 5. 例外の再送 6. リソースを含むtry文 7. Generic を使用している可変長引数
  • 23. JDK6 BufferedReader reader = null; try { reader = new BufferedReader( new FileReader("readTextFile.txt")); ... } finally { if (reader != null) { reader.close(); } }
  • 24. JDK7 try (BufferedReader reader = new BufferedReader( new FileReader("readTextFile.txt"))) { ... } // BufferedReader は java.lang.AutoCloseable を実装し ている
  • 25. JDK7 try (BufferedReader reader = new BufferedReader( new FileReader("readTextFile.txt")); BufferedWriter writer = new BufferedWriter( new FileWriter("writeTextFile.txt"))) { ... }
  • 26. java.lang.AutoCloseable を 継承および実装しているもの • java.beans.XMLDecoder • java.sql.ResultSet • java.beans.XMLEncoder • java.sql.Statement • java.io.Closeable • java.nio.channels.FileLock • java.io.ObjectInput • javax.sound.midi.MidiDevic • java.io.ObjectOutput e • java.sql.Connection • javax.sound.midi.Receiver • javax.sound.midi.Transmitt er • javax.sound.sampled.Line
  • 27. アジェンダ 1. switch 文で String が使用できる 2. 2進数表現とアンダースコア区切り 3. ダイヤモンド 4. 例外のマルチキャッチ 5. 例外の再送 6. リソースを含むtry文 7. Generic を使用している可変長引数
  • 28. JDK6 public static void main(String[] args) { List<String> list = toList("hoge", "piyo"); } private static <T> List<T> toList(T... args) { List<T> list = new ArrayList<T>(); for (T t : args) { list.add(t); } return list; }
  • 29. JDK7 public static void main(String[] args) { List<String> list = toList("hoge", "piyo"); } private static <T> List<T> toList(T... args) { // 警告! List<T> list = new ArrayList<T>(); for (T t : args) { list.add(t); } return list; }
  • 30. 警告の理由 • Type safety: Potential heap pollution via varargs parameter args private static <T> List<T> toList(T... args) { Object[] objectArray = args; objectArray[1] = new Integer(200); ... }
  • 31. これも警告出ちゃうの? • public static <T> List<T> java.util.Arrays.asList(T... a) • public static <T> boolean java.util.Collections.addAll(Collection<? super T> c, T... elements) • public static <E extends Enum<E>> java.util.EnumSet<E> EnumSet.of(E first, E... rest) • protected final void javax.swing.SwingWorker.publish(V... chunks)
  • 32. JDK7 public static void main(String[] args) { List<String> list = toList("hoge", "piyo"); } @SafeVarargs private static <T> List<T> toList(T... args) { // 警告なし List<T> list = new ArrayList<T>(); for (T t : args) { list.add(t); } return list; }
  • 33. お わ