33
JSR 334 Project Coin 開開開 開開 開開

Project coin

Embed Size (px)

DESCRIPTION

2012/10/22 社内勉強会

Citation preview

Page 1: Project coin

JSR 334Project Coin

開発部 齋藤 輝明

Page 2: Project coin

アジェンダ

1. switch   文で String が使用できる2. 2進数表現とアンダースコア区切り3.ダイヤモンド4.例外のマルチキャッチ5.例外の再送6.リソースを含む try文7. Generic を使用している可変長引数

Page 3: Project coin

アジェンダ

1. switch   文で String が使用できる2. 2進数表現とアンダースコア区切り3.ダイヤモンド4.例外のマルチキャッチ5.例外の再送6.リソースを含む try文7. Generic を使用している可変長引数

Page 4: Project coin

JDK6 までの switch 文で使用できる型

• 整数型o charo byteo shorto into 上記の型に対応するラッパークラス

• enum 型

Page 5: Project coin

JDK7 の switch 文で使用できる型

• 整数型o charo byteo shorto into 上記の型に対応するラッパークラス

• enum 型

• String 型

Page 6: Project coin

JDK6

if (animal.equals("dog")) { ...} else if (animal.equals("cat")) { ...} else { ...}

Page 7: Project coin

JDK7

switch (animal) { case "dog": ... break; case "cat": ... break; default: ... break;}

Page 8: Project coin

アジェンダ

1. switch   文で String が使用できる2. 2進数表現とアンダースコア区切り3.ダイヤモンド4.例外のマルチキャッチ5.例外の再送6.リソースを含む try文7. Generic を使用している可変長引数

Page 9: Project coin

JDK6

int decimal = 10; // 10進数int octal = 012; // 8進数int hexadecimal = 0xA; // 16進数

Page 10: Project coin

JDK7 (1/2)

int decimal = 10; // 10進数int octal = 012; // 8進数int hexadecimal = 0xA; // 16進数int binary = 0b1010; // 2進数

Page 11: Project coin

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; // コンパイルエラー

Page 12: Project coin

アジェンダ

1. switch   文で String が使用できる2. 2進数表現とアンダースコア区切り3.ダイヤモンド4.例外のマルチキャッチ5.例外の再送6.リソースを含む try文7. Generic を使用している可変長引数

Page 13: Project coin

JDK6

Map<String, List<String>> map = new HashMap<String, List<String>>();

Page 14: Project coin

JDK7

// <> ダイアモンド!Map<String, List<String>> map = new HashMap<>();

Page 15: Project coin

アジェンダ

1. switch   文で String が使用できる2. 2進数表現とアンダースコア区切り3.ダイヤモンド4.例外のマルチキャッチ5.例外の再送6.リソースを含む try文7. Generic を使用している可変長引数

Page 16: Project coin

JDK6

try {

...} catch (FileNotFoundException e) { ...} catch (ParseException e) { ...}

Page 17: Project coin

JDK7

try {

...} catch (FileNotFoundException | ParseException e) { ...}

Page 18: Project coin

アジェンダ

1. switch   文で String が使用できる2. 2進数表現とアンダースコア区切り3.ダイヤモンド4.例外のマルチキャッチ5.例外の再送6.リソースを含む try文7. Generic を使用している可変長引数

Page 19: Project coin

JDK6

void execute() throws ChildException { try { throw new ChildException(); } catch (ParentException e) { throw e; // コンパイルエラー }}

Page 20: Project coin

JDK6

void execute() throws ParentException { try { throw new ChildException(); } catch (ParentException e) { throw e; // エラーにならない }}

Page 21: Project coin

JDK7

void execute() throws ChildException { try { throw new ChildException(); } catch (ParentException e) { throw e; // エラーにならない! }}

Page 22: Project coin

アジェンダ

1. switch   文で String が使用できる2. 2進数表現とアンダースコア区切り3.ダイヤモンド4.例外のマルチキャッチ5.例外の再送6.リソースを含む try文7. Generic を使用している可変長引数

Page 23: Project coin

JDK6

BufferedReader reader = null;try { reader = new BufferedReader( new FileReader("readTextFile.txt")); ...} finally { if (reader != null) { reader.close(); }}

Page 24: Project coin

JDK7

try (BufferedReader reader = new BufferedReader( new FileReader("readTextFile.txt"))) { ...}

// BufferedReader は java.lang.AutoCloseable を実装している

Page 25: Project coin

JDK7

try (BufferedReader reader = new BufferedReader( new FileReader("readTextFile.txt")); BufferedWriter writer = new BufferedWriter( new FileWriter("writeTextFile.txt"))) { ...}

Page 26: Project coin

java.lang.AutoCloseable を継承および実装しているもの

• java.beans.XMLDecoder• java.beans.XMLEncoder• java.io.Closeable• java.io.ObjectInput• java.io.ObjectOutput• java.sql.Connection

• java.sql.ResultSet• java.sql.Statement• java.nio.channels.FileLock• javax.sound.midi.MidiDevice

• javax.sound.midi.Receiver• javax.sound.midi.Transmitter

• javax.sound.sampled.Line

Page 27: Project coin

アジェンダ

1. switch   文で String が使用できる2. 2進数表現とアンダースコア区切り3.ダイヤモンド4.例外のマルチキャッチ5.例外の再送6.リソースを含む try文7. Generic を使用している可変長引数

Page 28: Project coin

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;}

Page 29: Project coin

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;}

Page 30: Project coin

警告の理由

• 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); ...}

Page 31: Project coin

これも警告出ちゃうの?

• 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)

Page 32: Project coin

JDK7

public static void main(String[] args) { List<String> list = toList("hoge", "piyo");}

@SafeVarargsprivate static <T> List<T> toList(T... args) { // 警告なし

List<T> list = new ArrayList<T>(); for (T t : args) { list.add(t); } return list;}

Page 33: Project coin

   お わ り