2016-05-30 10 views
0

この機能は、変数オブジェクトに2種類のリストタイプ、List<String>またはList<Integer>を受け取ることがあります。私はこの機能を持っている:関数内のオブジェクトのようにリストを受け取った

private void isAList(Object example) 
{ 
} 

私は、次の2つの方法の反復処理することができます

isAList(new ArrayList<String>);

or 

isAlist(new ArrayList<Integer>);

私が知りたい、この最初の要素場合ListはStringまたはIntegerです。どのようにしてこのオブジェクトの最初の要素(常にリストを受け取ったか)を知ることができます。これは私のコードです:

private void isAList(Object example) 
{ 
    if (example != null && example instanceof List<?> && **FIRST_ELEMENT_OF_example??** instanceof String) 
    { 
     for (String cad : (List<String>)example) 
     { 
      XXXXXX MY CODE XXXXXX 
     } 
    } 
} 
+1

'!((リスト)の例).isEmpty()&&((リスト)の例).get(0)instanceof String'? – Berger

+1

@Bergerリストが空である場合には小切手を挿入し、その他の場合は素敵な「例外」を得るでしょう。 – Seth

+0

ここでは具体的にするために、このarraylistのすべての要素は文字列になります。数値または数値以外の値を意味すると思いますが、正規表現を使用してそれを検証することができますか? – Yazan

答えて

1

はソリューション:

private void isAList(Object example) 
{ 
    if (example != null && !((List<?>)example).isEmpty() && ((List<?>)example).get(0) instanceof String) 
    { 
     for (String cad : (List<String>)example) 
     { 
      // YOUR CODE 
     } 
    } 
} 
1
すでに

受け入れ答えが、より行うことができます。

まず:

private <T> void isAList(List<T> example) 
{ 
    if (example.isEmpty()) { 
     return; 
    } 
    if (example.get(0) instanceof Integer) { // Not null (!!) and Integer 
     // ... 
    } else { 
     // null or String 
     List<String> list = Collections.checkedList(example, String.class); 
     // ... 
    } 
} 

そしてCollections.checkedListの使用。

List<String> list = Collections.checkedList(list, String.class); 
0

私はこのようなものだろう:

private void isAList(Object example){ 
    if (example == null) 
     //handle it, return.... 
    try { 
     List<String> list = (List<String>) example; 
     for (String cad : list){ 
      XXXXXX MY CODE XXXXXX 
     } 
    } 
    catch (ClassCastException e){ 
     //handle exception 
    } 
    } 

非常に多くのチェックを行う必要はありませんが、try-catchブロックを使用することによって、あなたは計画通りにすべてが行く場合は、反復処理することを保証します文字列のあなたのリスト。 2つの可能性があります:オブジェクトがリストでないか、リスト内のオブジェクトが文字列でない場合、どちらの場合でもClassCastExceptionをスローする必要があります。

+0

これは正しくありません。 List(IntegerまたはString)の2つのタイプがあり、「1」にはString型を指定します。 – Manu

+0

はい、trueです。基本的にはキャストすることによって、String以外のもののリストを反復しようとします。したがって、ClassCastExceptionがスローされます。これはリストオブジェクトの場合にのみ実行されるため、強制的に実行されるか、またはいずれにしても中断されます(例外によって制御されます)。 –

関連する問題