技術的には、オブジェクトが特定の型であるかどうかを確認するために、あなたCAN使用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
です。
このメソッドを汎用化したので、Listで使用されているのと同じ型を返すことができます。
あなたは通常、theList.get(0)
を返しますが、ジェネリックの目的をより明確にするために行を追加しました。構文の
説明:
これは、コンパイラが言うことができます:誰かがTよりも、このメソッドに文字列のリストを渡した場合、リストはタイプTのもある... "このメソッドは、型Tの何かがああ見て期待してい文字列でなければなりません。誰かがこのメソッドに整数のリストを渡した場合、Tは整数でなければなりません。」
対照的に、あなたの方法はだけ文字列を返すことができ、それはで使用されているどのようなタイプは考えていませんリスト。 AとBの両方がTheParentClassという名前の同じクラスを拡張した場合も
...
、あなたはこのようなあなたのメソッドを宣言することができます:
public static String method(List<? extends TheParentClass> arg)
そのように、あなたが知っているだろうコンパイル時の型チェックの恩恵を受けることができます。
パラメータタイプを「>」と宣言することは、実際のタイプに興味がないことを意味します。 – biziclop
これと重複しています。http://stackoverflow.com/questions/1942644/get-generic-type-of-java-util-list – evanwong
@evanwong - 私がその欺瞞に同意するかどうかはわかりません。 – djangofan