Java使开关案例陈述更短

时间:2018-07-03 12:57:32

标签: java switch-statement case fragmentstatepageradapter

我的switch case statement中有这个FragmentStatePagerAdapter。而且我研究了许多类似的问题,但没有一个提供更短的答案,这意味着switch案例仍在其代码中。

此代码确实重复且难看。有没有办法使它看起来更短?

@Override
public SongListFragment getItem(int position) {
    SongListFragment slf = new SongListFragment();
    switch (position) {
        case 0:
            slf.setAudioList(getAudioList(tabTitles[0]));
            slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
                @Override
                public void onClick(Audio audio) {
                    itemListener.onClick(audio);
                }
            });
            return slf;
        case 1:
            slf.setAudioList(getAudioList(tabTitles[1]));
            slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
                @Override
                public void onClick(Audio audio) {
                    itemListener.onClick(audio);
                }
            });
            return slf;
        case 2:
            slf.setAudioList(getAudioList(tabTitles[2]));
            slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
                @Override
                public void onClick(Audio audio) {
                    itemListener.onClick(audio);
                }
            });
            return slf;
        case 3:
            slf.setAudioList(getAudioList(tabTitles[3]));
            slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
                @Override
                public void onClick(Audio audio) {
                    itemListener.onClick(audio);
                }
            });
            return slf;
        case 4:
            slf.setAudioList(getAudioList(tabTitles[4]));
            slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
                @Override
                public void onClick(Audio audio) {
                    itemListener.onClick(audio);
                }
            });
            return slf;
        default:
            return null;
    }
}

4 个答案:

答案 0 :(得分:8)

由于每个开关盒的主体几乎相同,因此索引/位置不同。首先,您可以完全摆脱开关的情况:

@Override
public SongListFragment getItem(int position) {
     SongListFragment slf = new SongListFragment();
     slf.setAudioList(getAudioList(tabTitles[position]));
     slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
        @Override
        public void onClick(Audio audio) {
            itemListener.onClick(audio);
        }
     });
     return slf;
}

答案 1 :(得分:0)

Lino的答案带有@SMA建议的简单绑定检查。

@Override
public SongListFragment getItem(int position) {
     if ( position < 0 || position >= tabTiles.length() ){
       //your previous default case
       return null;
     }else{
       SongListFragment slf = new SongListFragment();
       slf.setAudioList(getAudioList(tabTitles[position]));
       slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
         @Override
         public void onClick(Audio audio) {
              itemListener.onClick(audio);
            }
          });
     return slf;
   }
}

答案 2 :(得分:-1)

这里:

  @Override
public SongListFragment getItem(int position) {
    switch (position) {
        case 0:
            return yourMethod(0);
        case 1:
            return yourMethod(1);
        case 2:
            return yourMethod(2);
        case 3:
            return yourMethod(3);
        case 4:
            return yourMethod(4);
        default:
            return null;
    }
}

private Object yourMethod(int i) {
    SongListFragment slf = new SongListFragment();
    slf.setAudioList(getAudioList(tabTitles[i]));
    slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
        @Override
        public void onClick(Audio audio) {
            itemListener.onClick(audio);
        }
    });
    return slf;
}

答案 3 :(得分:-1)

@Override
public SongListFragment getItem(int position) {
    // don't need to initialize
    SongListFragment slf = null;
    // The position is 0 to 4, returns null when position is over tabTiles.length() 
    if (position >= 0 && position <= 4 
        && position < tabTiles.length()) {
        slf = new SongListFragment();
        slf.setAudioList(getAudioList(tabTitles[position]));
        slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
            @Override
            public void onClick(Audio audio) {
                itemListener.onClick(audio);
            }
        });
    }
    // returns SongListFragment if it is null or not
    return slf;
}