Java 7で何が起こるか-最終リスト

Joe Darcy(Sunのプロジェクトコインリーダー)がJava 7言語の革新の最終リストを掲載しました(元はこちら )。 これらは革新です:





スイッチケース式の文字列:

例:



 文字列s = ... 
スイッチ(s){ 
    ケース "foo":processFoo(s); 
    休憩; 
 } 




自動リソース管理

現在、メモリに加えてリソースを解放するには、try-finallyコンストラクトを使用する必要があります。 新しいアプローチにより、コードはよりコンパクトになり、エラー耐性が高まります。 たとえば、このコードの代わりに:



  BufferedReader br =新しいBufferedReader(新しいFileReader(パス)); 
 {
     return br.readLine(); 
 } 
最後に{ 
     br.close(); 
 } 


次のように記述できます。



  try(BufferedReader br =新しいBufferedReader(新しいFileReader(パス)){
     return br.readLine(); 
 } 




ジェネリックインスタンス作成時の型推論の改善



現在、ジェネリック型を使用して変数を初期化する場合、Javaは頻繁に繰り返す必要があります。 Java 7では、同じことをよりエレガントに行うことができます。 たとえば、古いデザイン:



  Map <String、List <String >> anagrams = new HashMap <String、List <String >>(); 


次のように書き換えることができます。



  Map <String、List <String >> anagrams = new HashMap <>(); 




可変数の引数(varargs)を使用したメソッド呼び出しの改善



これで、警告はメソッドの呼び出しポイントではなく、その宣言の場所で発行されます。

前:



  static <T>リスト<T> asList(T ... elements){...} 
静的リスト<Callable <String >> stringFactories(){ 
    呼び出し可能<String> a、b、c;  ... 
     * //警告:**「未チェックまたは安全でない操作を使用する」*
     return asList(a、b、c); 
 } 


今:



  * //警告:** "安全でない汎用配列の作成を有効にする" * 
 static <T>リスト<T> asList(T ... elements){...} 
静的リスト<Callable <String >> stringFactories(){
    呼び出し可能<String> a、b、c;  ... 
     return asList(a、b、c); 
 } 




強化されたリテラル



バイナリリテラル(0b101または0B101の形式)と、読みやすくするための数値リテラルでのアンダースコアのサポート(9_223_372_036_854_775_807Lなど)の2つのイノベーションがあります。



言語統合コレクションのサポート



コレクションリテラルと、リストとマップへの新しいタイプのアクセス([]経由)の2つの革新を組み合わせています。 コレクションリテラルは、新しいリスト、セット、およびマップの初期化を簡素化します。 前:



 最終リスト<整数> piDigits = Collections.unmodifiableList(Arrays.asList(3、1、4、1、5、9、2、6、6、5、3、5、9)); 




今:



 最終リスト<整数> piDigits = [3、1、4、1、5、9、2、6、5、5、3、5、9]; 




中括弧を使用して、Setが作成されます。



  final Set <Integer> primes = {2、7、31、127、8191、131071、524287}; 




古いマップ初期化メソッド:



 最終マップ<整数、文字列> platonicSolids;
 static { 
     solids = new LinkedHashMap;
     solids.put(4、「四面体」); 
     solids.put(6、「キューブ」); 
     solids.put(8、「八面体」); 
     solids.put(12、「十二面体」); 
     solids.put(20、「20面体」); 
     platonicSolids = Collections.immutableMap(ソリッド); 
 } 


マップを初期化する新しい方法:



  final Map <整数、文字列> platonicSolids = {4: "四面体"、6: "立方体"、8: "八面体"、12: "十二面体"、20: "二十面体"}; 




この方法で作成されたコレクションは不変であることに注意してください。



JSR 292のサポート(言語レベルでの動的型付け)



動的型付けをサポートするために、新しいjava.dyn.Dynamic型が導入されました。 使用例:



 動的x =(任意のタイプの式をここに含めることができます); 
オブジェクトy = x.foo( "ABC")。バー(42).baz(); 


このコードは常にコンパイルされますが、指定されたメソッドがDynamic型の変数にない場合、ランタイム例外がスローされます。



拒否されたオファー



議論の最後で、いくつかの潜在的な革新がキャンセルされました。 その中でも、例外処理、エルビス演算子、その他のヌルセーフ演算子、および大きな配列の改善。



それであなたはこれについてどう思いますか?



更新:元のバージョンの妨害についておaび申し上げます。 何らかの理由でプレビューがトピックを公開しました。 はい、そしてジェネリックに関するHabrタグはつまずきました。

更新2:antalusは、これがJava 7のすべての革新ではなく、言語にのみ関連していることを正しく指摘しました。 全リストはこちら



All Articles