[英]How to avoid a lot of if else if conditions when there is creation of object with different values
我有一個具有ID和名稱的四個不同的枚舉UserOneStatus,UserTwoStatus,UserThreeType和UserFourType
我必須根據那些枚舉ID來過濾用戶,所以最終得到以下代碼
if (ChoosenUserFilterValue.equals(String.valueOf(UserOneStatus.REQUESTED.getId()))) {
selecedUserFilter = new UserFilter(UserOneStatus.class,
String.valueOf(UserOneStatus.REQUESTED.getId()),
UserOneStatus.REQUESTED.getUserStatus(), String.valueOf(UUID.randomUUID()));
} else if (ChoosenUserFilterValue.equals(UserOneStatus.ACTIVE.getId() + "")) {
selecedUserFilter = new UserFilter(UserOneStatus.class,
String.valueOf(UserOneStatus.ACTIVE.getId()),
UserOneStatus.ACTIVE.getUserStatus(), String.valueOf(UUID.randomUUID()));
} else if (ChoosenUserFilterValue.equals(UserOneStatus.INACTIVE.getId() + "")) {
selecedUserFilter = new UserFilter(UserOneStatus.class,
String.valueOf(UserOneStatus.INACTIVE.getId()),
UserOneStatus.INACTIVE.getUserStatus(), String.valueOf(UUID.randomUUID()));
} else if (ChoosenUserFilterValue.equals(UserTwoStatus.REVOKED.getId() + "")) {
selecedUserFilter = new UserFilter(UserTwoStatus.class,
String.valueOf(UserTwoStatus.REVOKED.getId()),
UserTwoStatus.REVOKED.getLoginStatus(), String.valueOf(UUID.randomUUID()));
} else if (ChoosenUserFilterValue.equals(UserThreeType .ADMIN.getId() + "")) {
selecedUserFilter = new UserFilter(Some.class,
String.valueOf(UserThreeType.ADMIN.getId()),
UserThreeType.ADMIN.getName(), String.valueOf(UUID.randomUUID()));
} else if (ChoosenUserFilterValue.equals(UserFourType .SSO_TEMPLATE.getId() + "")) {
selecedUserFilter = new UserFilter(Some.class,
String.valueOf(UserFourType.SSO_TEMPLATE.getId()),
UserFourType.TEMPLATE.getName(), String.valueOf(UUID.randomUUID()));
}
我重構了一點點,但是我無法獲得與上層代碼相同的結果
重構后的代碼如下
Map<String,Class<?>> map = new HashMap<String, Class<?>>();
map.put(UserOneStatus.REQUESTED.getId()+"", UserOneStatus.class);
map.put(UserOneStatus.ACTIVE.getId()+"", UserOneStatus.class);
map.put(UserOneStatus.INACTIVE.getId()+"", UserOneStatus.class);
map.put(UserTwoStatus.REVOKED.getId()+"", UserTwoStatus.class);
map.put(UserThreeType.ADMIN.getId()+"", Some.class);
map.put(UserFourType.TEMPLATE.getId()+"", Some.class);
String key ="";
if(map.containsKey(ChoosenUserFilterValue)){
Class<?> getSelectedUserFilterValueClass = map.get(selectedUserFilterValue);
for (Entry<String, Class<?>> entry : map.entrySet()) {
key = entry.getKey();
}
selecedUserFilter = new UserFilter(getSelectedUserFilterValueClass, key , getSelectedUserFilterValueClass.toString(), String.valueOf(UUID.randomUUID());
}
任何建議表示贊賞
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.