Javaの三項演算子とは何か
Javaの三項演算子(ternary operator)は、3つのオペランドを持つ唯一の演算子です。この演算子は以下の形式で使用されます:
条件 ? 式1 : 式2
ここで、条件
はブール型の式で、式1
と式2
は任意の式です。
動作は次のようになります:
– 条件
がtrue
の場合、式1
が評価され、その結果が全体の式の結果となります。
– 条件
がfalse
の場合、式2
が評価され、その結果が全体の式の結果となります。
この演算子は主にif-else文を短く書くために使用されます。例えば、次のif-else文:
if (条件) {
結果 = 式1;
} else {
結果 = 式2;
}
は、三項演算子を使用して次のように書くことができます:
結果 = 条件 ? 式1 : 式2;
このように、Javaの三項演算子はコードを簡潔に書くための便利なツールです。ただし、複雑な条件や式を扱う場合は、コードの可読性を保つために通常のif-else文を使用することが推奨されます。
三項演算子の使用例
Javaの三項演算子の使用例を以下に示します。
例1:最大値の取得
int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println("最大値は " + max);
このコードは、a
とb
のうち大きい方の値をmax
に代入します。出力は最大値は 20
となります。
例2:偶数・奇数の判定
int num = 15;
String result = (num % 2 == 0) ? "偶数" : "奇数";
System.out.println(num + "は" + result);
このコードは、num
が偶数か奇数かを判定します。出力は15は奇数
となります。
例3:nullチェック
String str = null;
String message = (str != null) ? str : "文字列はnullです";
System.out.println(message);
このコードは、str
がnull
でなければその値を、null
であれば"文字列はnullです"
をmessage
に代入します。出力は文字列はnullです
となります。
これらの例からわかるように、Javaの三項演算子はコードを簡潔に書くための便利なツールです。ただし、複雑な条件や式を扱う場合は、コードの可読性を保つために通常のif-else文を使用することが推奨されます。
Javaのジェネリクスのワイルドカードとは何か
Javaのジェネリクスのワイルドカード(wildcard)は、不明な型を表すための特殊な記号?
です。ワイルドカードは、ジェネリクスの型パラメータが何であるかを具体的に知らない場合や、複数の型パラメータに対応する必要がある場合に使用されます。
ワイルドカードは主に以下の3つの形式で使用されます:
-
無制限ワイルドカード:
?
。これは任意の型を表します。例えば、List<?>
は「何らかの型のオブジェクトを要素とするリスト」を表します。 -
上限付きワイルドカード:
? extends 型
。これは指定した型またはそのサブタイプを表します。例えば、List<? extends Number>
は「Number型またはそのサブタイプ(Integer、Doubleなど)のオブジェクトを要素とするリスト」を表します。 -
下限付きワイルドカード:
? super 型
。これは指定した型またはそのスーパータイプを表します。例えば、List<? super Integer>
は「Integer型またはそのスーパータイプ(Number、Objectなど)のオブジェクトを要素とするリスト」を表します。
ワイルドカードを使用することで、より柔軟なコードを書くことができます。ただし、ワイルドカードを使用すると型安全性が損なわれる可能性があるため、適切な使用が求められます。
ジェネリクスのワイルドカードの使用例
Javaのジェネリクスのワイルドカードの使用例を以下に示します。
例1:無制限ワイルドカード
List<?> list = new ArrayList<String>();
list = new ArrayList<Integer>();
このコードでは、list
は任意の型のリストを参照することができます。最初はString
のリストを参照していますが、次にInteger
のリストを参照するように変更されています。
例2:上限付きワイルドカード
List<? extends Number> numbers = new ArrayList<Integer>();
numbers = new ArrayList<Double>();
このコードでは、numbers
はNumber
またはそのサブタイプのリストを参照することができます。最初はInteger
のリストを参照していますが、次にDouble
のリストを参照するように変更されています。
例3:下限付きワイルドカード
List<? super Integer> integers = new ArrayList<Number>();
integers.add(10);
このコードでは、integers
はInteger
またはそのスーパータイプのリストを参照することができます。Number
のリストを参照し、そのリストにInteger
の値を追加しています。
これらの例からわかるように、Javaのジェネリクスのワイルドカードはコードを柔軟に書くための便利なツールです。ただし、ワイルドカードを使用すると型安全性が損なわれる可能性があるため、適切な使用が求められます。