技術的に言えば、オブジェクトが特定のタイプであるかどうかを確認するために使用できます。instanceof
しかし...それは良い考えではありません。
メソッドを宣言した方法では、任意のタイプのリストを受け入れることができるため、必ずしもAまたはBになるとは限りません。
何をしようとしているのかを判断するのは難しいですが、おそらくメソッドをジェネリックにする必要があります。
あなたはこのようにそうすることができます:
public static <T> String method(List<T> arg) {
// We now know that the type of the list is T, which is
// determined based on the type of list passed to this
// method. This would demonstrate the point better if
// the return type was T, but I'm leaving the return type
// as String, because that's what your code returns.
}
より良い例を次に示します。
リストの最初の要素を返すジェネリックメソッドを作成する場合は、次のようにします。
public static <T> T firstElement(List<T> theList) {
if (theList == null) {
return null;
}
T objectOfTypeT = theList.get(0);
return objectOfTypeT;
}
戻りタイプがになっていることに注意してくださいT
。
このメソッドをジェネリックにしたため、リストで使用されているのと同じ型を返すことができます。
通常は単に戻るだけですがtheList.get(0)
、ジェネリックスの目的をより明確にするために行を追加しました。
構文の説明:
は<T>
、このメソッドがTという名前の1つのタイプパラメータを取ることを示します。
直後に続くのT
は戻り型です(通常、文字列、整数などを返すのと同じように)。
ListパラメーターのT
は、コンパイラーが一体何であるかを知る方法T
です。
これにより、コンパイラは次のように言うことができます。このメソッドの整数のリスト。Tは整数である必要があります。 "
対照的に、メソッドは文字列のみを返すことができ、リストでどのタイプが使用されているかはわかりません。
また...
AとBの両方がTheParentClassという名前の同じクラスを拡張する場合、次のようにメソッドを宣言できます。
public static String method(List<? extends TheParentClass> arg)
そうすれば、パラメーターの可能なタイプについてもう少し知ることができます(そして、コンパイル時のタイプチェックの恩恵を受けることができます)。