2017-08-14 10 views
-1

検索フラグメントをインスタンス化している行にエラーフラグメントが既に定義されています。私は間違って何をしていますか?スイッチを使用して値を返すJava汎用関数

private <T extends Fragment> T getInitialFragment(Tab clickedTab) { 
     switch (clickedTab) { 
      case TAB_A: 
       ListFragment fragment = new ListFragment(); 
       return (T)fragment; 
      case TAB_B: 
       SearchFragment fragment = new SearchFragment(); 
       return (T)fragment; 
     } 
} 
+0

エラーメッセージを追加してください。それは助けるかもしれません –

答えて

0

彼らはスコープを共有する場合は、別の変数に同じ名前を使用することはできません - あなたはあなたのコード内で2回宣言fragmentという名前の変数を持ちます。あなたはそれを持っているので、fragmentSearchに、すなわち1 fragmentListに2番目の名前を変更するか、何のメリットがありませんよう完全に割り当てを捨てることはできません。

private <T extends Fragment> T getInitialFragment(Tab clickedTab) { 

     switch (clickedTab) { 
      case TAB_A: 
       return (T)(new ListFragment()); 
      case TAB_B: 
       return (T)(new SearchFragment()); 
     } 

} 

また、あなたのswitchdefaultを追加する必要があります。

+0

しかし、SearchFragmentはListFragmentと同じクラスではないので、動作しません –

+0

確かに、それを逃した。答えを編集しました。 –

+0

ありがとうヒープは、受け入れられた答えとしてマークします:) –

0

switch-caseはfall-troughです(すべてのケースがブレーク/リターンが見つかるまで参照されます)。すべてのケースは同じスコープです。 2番目のフラグメントの名前をfragment2に変更するか、またはTのフラグメントとして外側のスコープで定義します。

編集:遅く。

+0

ええ、今、感謝しています。 –

関連する問題