サーチ…


前書き

このトピックでは、Java SE 7のJavaプログラミング言語に追加された新機能の概要を紹介します。JDBCやJava Virtual Machine(JVM)など、他の分野には、このトピックでは

備考

Java SE 7の拡張機能

新しいJava SE 7プログラミング言語機能

  • バイナリリテラル :整数型(byte、short、int、long)は、バイナリナンバーシステムを使用して表現することもできます。バイナリリテラルを指定するには、数字にプレフィックス0bまたは0Bを追加します。
  • switch文の文字列: switch文の式にStringオブジェクトを使用できます
  • try-with-resourcesステートメント :try-with-resourcesステートメントは、1つ以上のリソースを宣言するtryステートメントです。リソースは、プログラムが終了した後で閉じなければならないオブジェクトとして存在します。 try-with-resourcesステートメントは、各リソースがステートメントの最後に閉じられるようにします。 java.lang.AutoCloseableを実装するオブジェクトは、java.io.Closeableを実装するすべてのオブジェクトを含み、リソースとして使用できます。
  • 改善された型チェックによる複数の例外型のキャッチと例外の再帰 :単一のキャッチブロックは、複数の型の例外を処理できます。この機能は、コードの重複を減らし、過度に広い例外をキャッチする誘惑を軽減することができます。
  • 数値リテラルの下線: 数値リテラルの数字の間には任意の数のアンダースコア(_)を使用できます。この機能を使用すると、たとえば、数値リテラルの数字のグループを区切ることができ、コードの可読性が向上します。
  • 汎用インスタンス作成の型推論 :汎用クラスのコンストラクターを呼び出すために必要な型引数を、型パラメーター(<>)の空のセットで置き換えることができます。アングルブラケットのこのペアは、非公式にダイヤモンドと呼ばれています。
  • VarargsメソッドでReifiable Formal Parametersを使用するときのコンパイラの警告とエラーの改善

バイナリリテラル

// An 8-bit 'byte' value:
byte aByte = (byte)0b00100001;

// A 16-bit 'short' value:
short aShort = (short)0b1010000101000101;

// Some 32-bit 'int' values:
int anInt1 = 0b10100001010001011010000101000101;
int anInt2 = 0b101;
int anInt3 = 0B101; // The B can be upper or lower case.

// A 64-bit 'long' value. Note the "L" suffix:
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;

try-with-resourcesステートメント

この例では、ファイルから最初の行を読み取ります。 BufferedReaderインスタンスを使用してファイルからデータを読み取ります。 BufferedReaderは、プログラムの終了後に閉じる必要のあるリソースです。

static String readFirstLineFromFile(String path) throws IOException {
  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    return br.readLine();
  }
}

この例では、try-with-resourcesステートメントで宣言されたリソースはBufferedReaderです。宣言文は、tryキーワードの直後にかっこ内に表示されます。 Java SE 7以降のクラスBufferedReaderjava.lang.AutoCloseableインタフェースを実装していjava.lang.AutoCloseableBufferedReaderインスタンスはtry-with-resourceステートメントで宣言されているため、tryステートメントが正常に完了するか、突然終了するかにかかわらず( IOExceptionスローするBufferedReader.readLineメソッドの結果として)閉じられます。

数値リテラルの下線

次の例は、数値リテラルでアンダースコアを使用できる他の方法を示しています。

long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;

数字の間にのみアンダースコアを置くことができます。次の場所にアンダースコアを配置することはできません。

  • 番号の最初または最後に
  • 浮動小数点リテラルの小数点に隣接
  • 接尾辞FまたはLの前
  • 数字の列が期待される位置

汎用インスタンス作成のための型推論

あなたは使うことができます

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

の代わりに

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

ただし、使用することはできません

List<String> list = new ArrayList<>();
list.add("A");

  // The following statement should fail since addAll expects
  // Collection<? extends String>

list.addAll(new ArrayList<>());

それはコンパイルできないためです。ダイヤモンドはメソッド呼び出しでよく働くことに注意してください。ただし、ダイアモンドは主に変数の宣言に使用することをお勧めします。

switch文の文字列

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
     String typeOfDay;
     switch (dayOfWeekArg) {
         case "Monday":
             typeOfDay = "Start of work week";
             break;
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
             typeOfDay = "Midweek";
             break;
         case "Friday":
             typeOfDay = "End of work week";
             break;
         case "Saturday":
         case "Sunday":
             typeOfDay = "Weekend";
             break;
         default:
             throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
     }
     return typeOfDay;
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow