Java 7 アプレッソ 吉田哲也
基本情報 コードネーム : Dolphin 現在のバージョン : java version "1.7.0-ea“ Java(TM) SE Runtime Environment (build 1.7.0-ea-b18) Java HotSpot(TM) 64-Bit Server VM (build 1.7.0-ea-b18, mixed mode) Project  ホーム : JDK 7 Project ( https://jdk7.dev.java.net/ ) リリースは  2008  年?
言語関連の変更点  ( 予定 ) パッケージの追加  ( 予定 ) VM  関連の変更点  ( 予定 )
言語関連の変更点  ( 予定 ) Array Syntax for Collections Closures Property Literals Type Interface Factory Methods instead of Constructors Arbitrary Precision Arithmetic Sub-package Access
Array Syntax for Collections Collections  を配列のように扱う List list = new ArrayList(); list.add(0, “tencho”); list.add(1, “ono”); String name = list.get(0); List list = new ArrayList(); list[0] = “tencho”; list[1] = “ono”; String name = list[0]; List list = {“tencho”, “ono”}; コンパイラの変更のみ VM  の変更はなし
Local Functions/Closures ローカル関数 関数のポインタのような感じ int plus2(int x) {return x + 2}; int(int) plus2f = plus2; System.out.println(plus2f(2)); Closure 名前のないローカル関数 int(int) plus2f = (int x) {return x + 2}; void(int) throws InterrupedException closure =    (int t) { Thread.sleep(t) }; ユースケース ActionListner 、 Runnable  など 引数としてのアルゴリズムの提供
Properties Literals 簡単なプロパティアクセス Point p = new Point(); p.setX(56); p.setY(87); int z = p.getX(); Point p = new Point(); p->X = 56; p->Y = 87; int z = p->X ; ->  の代わりに  .  や  #  も提案されている property  キーワードの追加 public class Point {   public int  property  x;   public int  property  y; }  フィールド名と  setter/getter  が同名の場合、 setter/getter  にディスパッチ
Subpackage Access JSR 294 サブパッケージからスーパーパッケージのクラス内の保護されたフィールドやメソッドにアクセス可能 サブパッケージから友好的であることを明示的に宣言されたスーパーパッケージのメンバーへのアクセス可能 org/jdom/super-package.java superpackage org.jdom {   //  スーパーパッケージのメンバー   member package org.jdom, org.jdom.input, org.jdom.output;   //  公開するクラス   export org.jdom.Element, org.jdom.Attribute, org.jdom.input.Builder } 下記のアクセスレベルが可能 public non-exproted public(superpackage private) package private JUnit  テストを作成するときに便利 テストのために  public  にする必要なし
パッケージの追加  ( 予定 ) New Filesystem API True Asynchronous I/O Date and Time API Swing Application Framewok
New Filesystem API java.nio.filesystems java.nio.filesystems.attributes コピーや移動用のメソッド PathRefefence#copyTo() PathReference#moveTo() 存在すればどうする? などの各種オプションの付加可能 FileAttributes  クラス BasicFileAttributes PosixFileAttributes FATFileAttributes など
Swing Application Framework Swing  アプリケーションを作成するのをより容易に いちいち個々に  Swing  コンポーネントを作り、アクションを作っていかなくても、ほとんどのアプリケーションで共通の処理  ( お約束コード )  を  framewok  が提供 起動や停止、リソースやアクション、セッション状態の管理などを  framework  が吸収 Windows  クローズ ウィンドウサイズやレイアウト情報の保存 など いくつかのカスタマイズポイントのみプラグインしていく イベント・ディスパッチ・スレッドの外で実行する非同期アクションの作成も可能
VM  関連の変更点  ( 予定 ) Versioned JARs/Package Management More Scripting Engines New Javadoc Tags Tiered Compilation
Versioned JARs/Package Management Java Module System (JSR 277 、 294) 「あるプログラムが  Xerces 2.6  ではなく、 Xerces 2.7.1  を要求する」などが可能 JMS  は下記の機能を提供 JAM (Java Application Module) リポジトリ など JAR  単位の配布ではなく  JAM  単位の配布 JAM  の情報 インポートするモジュール エクスポートするクラス など JAM  の内容 メタデータ モジュール  (JAR 、ネイティブライブラリ など ) リソース  ( ファイル など )
Tiered Compilation Client/Server HotSpot VM  の混在 Client VM  は起動が速く、 Server VM  はパフォーマンスが漸近的 起動時は  Client VM  で起動し、その後  Server VM  に変更する
URLs JDK 7 Project https://jdk7.dev.java.net/ Java 7 and Beyond http://www.cafeaulait.org/slides/nycjava/java7/index.html 2007  年の  Java:  この  1  年を占う http://www-06.ibm.com/jp/developerworks/java/library/j-java2007.shtml Super Package http://journal.mycom.co.jp/articles/2007/05/10/javaone3/002.html JAM 、 JMS http://journal.mycom.co.jp/column/jsr/012/index.html
ありがとうございました
予備資料
Type Interface コンパイラが推測できる型の省略可能 ローカル変数の型 など void method() {   List<String> list = new ArrayList<String>();   … } void method() {   list := new ArrayList<String>();   … } final  として宣言される??
Arbitrary Precision Arithmetic 無限精度の演算の簡略化 BigInteger low = BigInteger.ONE; BigInteger high = BigInteger.ONE; high = high.add(low); BigInteger low = BigInteger.ONE; BigInteger high = BigInteger.ONE; high = high + low;
Factory Methods instead of Constructors new  キーワードの追加?? Foo f1 =  Foo.new(1, 2); Foo f2 =  Foo.new(subclass of Foo.class, 1, 2);
今後の  Java  でサポートされない可能性の高い機能 多重継承 演算子オーバーロード AOP プリプロセッサ / マクロ 多重ディスパッチ 複数戻り値 By Peter von der Ahe at JavaOne Tokyo 2005 「可読性」「シンプルさ」「互換性」の維持

Java 7

  • 1.
  • 2.
    基本情報 コードネーム :Dolphin 現在のバージョン : java version &quot;1.7.0-ea“ Java(TM) SE Runtime Environment (build 1.7.0-ea-b18) Java HotSpot(TM) 64-Bit Server VM (build 1.7.0-ea-b18, mixed mode) Project ホーム : JDK 7 Project ( https://jdk7.dev.java.net/ ) リリースは 2008 年?
  • 3.
    言語関連の変更点 (予定 ) パッケージの追加 ( 予定 ) VM 関連の変更点 ( 予定 )
  • 4.
    言語関連の変更点 (予定 ) Array Syntax for Collections Closures Property Literals Type Interface Factory Methods instead of Constructors Arbitrary Precision Arithmetic Sub-package Access
  • 5.
    Array Syntax forCollections Collections を配列のように扱う List list = new ArrayList(); list.add(0, “tencho”); list.add(1, “ono”); String name = list.get(0); List list = new ArrayList(); list[0] = “tencho”; list[1] = “ono”; String name = list[0]; List list = {“tencho”, “ono”}; コンパイラの変更のみ VM の変更はなし
  • 6.
    Local Functions/Closures ローカル関数関数のポインタのような感じ int plus2(int x) {return x + 2}; int(int) plus2f = plus2; System.out.println(plus2f(2)); Closure 名前のないローカル関数 int(int) plus2f = (int x) {return x + 2}; void(int) throws InterrupedException closure = (int t) { Thread.sleep(t) }; ユースケース ActionListner 、 Runnable など 引数としてのアルゴリズムの提供
  • 7.
    Properties Literals 簡単なプロパティアクセスPoint p = new Point(); p.setX(56); p.setY(87); int z = p.getX(); Point p = new Point(); p->X = 56; p->Y = 87; int z = p->X ; -> の代わりに . や # も提案されている property キーワードの追加 public class Point { public int property x; public int property y; } フィールド名と setter/getter が同名の場合、 setter/getter にディスパッチ
  • 8.
    Subpackage Access JSR294 サブパッケージからスーパーパッケージのクラス内の保護されたフィールドやメソッドにアクセス可能 サブパッケージから友好的であることを明示的に宣言されたスーパーパッケージのメンバーへのアクセス可能 org/jdom/super-package.java superpackage org.jdom { // スーパーパッケージのメンバー member package org.jdom, org.jdom.input, org.jdom.output; // 公開するクラス export org.jdom.Element, org.jdom.Attribute, org.jdom.input.Builder } 下記のアクセスレベルが可能 public non-exproted public(superpackage private) package private JUnit テストを作成するときに便利 テストのために public にする必要なし
  • 9.
    パッケージの追加 (予定 ) New Filesystem API True Asynchronous I/O Date and Time API Swing Application Framewok
  • 10.
    New Filesystem APIjava.nio.filesystems java.nio.filesystems.attributes コピーや移動用のメソッド PathRefefence#copyTo() PathReference#moveTo() 存在すればどうする? などの各種オプションの付加可能 FileAttributes クラス BasicFileAttributes PosixFileAttributes FATFileAttributes など
  • 11.
    Swing Application FrameworkSwing アプリケーションを作成するのをより容易に いちいち個々に Swing コンポーネントを作り、アクションを作っていかなくても、ほとんどのアプリケーションで共通の処理 ( お約束コード ) を framewok が提供 起動や停止、リソースやアクション、セッション状態の管理などを framework が吸収 Windows クローズ ウィンドウサイズやレイアウト情報の保存 など いくつかのカスタマイズポイントのみプラグインしていく イベント・ディスパッチ・スレッドの外で実行する非同期アクションの作成も可能
  • 12.
    VM 関連の変更点 ( 予定 ) Versioned JARs/Package Management More Scripting Engines New Javadoc Tags Tiered Compilation
  • 13.
    Versioned JARs/Package ManagementJava Module System (JSR 277 、 294) 「あるプログラムが Xerces 2.6 ではなく、 Xerces 2.7.1 を要求する」などが可能 JMS は下記の機能を提供 JAM (Java Application Module) リポジトリ など JAR 単位の配布ではなく JAM 単位の配布 JAM の情報 インポートするモジュール エクスポートするクラス など JAM の内容 メタデータ モジュール (JAR 、ネイティブライブラリ など ) リソース ( ファイル など )
  • 14.
    Tiered Compilation Client/ServerHotSpot VM の混在 Client VM は起動が速く、 Server VM はパフォーマンスが漸近的 起動時は Client VM で起動し、その後 Server VM に変更する
  • 15.
    URLs JDK 7Project https://jdk7.dev.java.net/ Java 7 and Beyond http://www.cafeaulait.org/slides/nycjava/java7/index.html 2007 年の Java: この 1 年を占う http://www-06.ibm.com/jp/developerworks/java/library/j-java2007.shtml Super Package http://journal.mycom.co.jp/articles/2007/05/10/javaone3/002.html JAM 、 JMS http://journal.mycom.co.jp/column/jsr/012/index.html
  • 16.
  • 17.
  • 18.
    Type Interface コンパイラが推測できる型の省略可能ローカル変数の型 など void method() { List<String> list = new ArrayList<String>(); … } void method() { list := new ArrayList<String>(); … } final として宣言される??
  • 19.
    Arbitrary Precision Arithmetic無限精度の演算の簡略化 BigInteger low = BigInteger.ONE; BigInteger high = BigInteger.ONE; high = high.add(low); BigInteger low = BigInteger.ONE; BigInteger high = BigInteger.ONE; high = high + low;
  • 20.
    Factory Methods insteadof Constructors new キーワードの追加?? Foo f1 = Foo.new(1, 2); Foo f2 = Foo.new(subclass of Foo.class, 1, 2);
  • 21.
    今後の Java でサポートされない可能性の高い機能 多重継承 演算子オーバーロード AOP プリプロセッサ / マクロ 多重ディスパッチ 複数戻り値 By Peter von der Ahe at JavaOne Tokyo 2005 「可読性」「シンプルさ」「互換性」の維持