자 바 는 If else 와 switch 를 무엇으로 대체 합 니까?

11643 단어 Java
자바 에 서 는 판단 해 야 할 조건 이 많 고 조건 마다 해 야 할 일 도 다르다.코드 를 쓸 때 첫 번 째 생각 은 if.. else 일 것 입 니 다. 코드 를 쓴 후에 아주 긴 if, else if 를 발견 할 수 있 습 니 다. 코드 가 보기 싫 습 니 다. 현재 조건 이 마지막 이 어야 조건 을 만족 시 킬 수 있다 면 프로그램 은 모든 if 의 조건 이 만족 하 는 지 확인 해 야 합 니 다. 그러면 프로그램의 성능 에 영향 을 줄 것 같 습 니 다.
    그렇다면 무엇으로 대체 할 것 인가? 많은 사람들 이 틀림없이 switch 라 고 생각 할 것 이다.인터넷 에는 switch 와 if else 의 댓 글 이 많 고 이들 의 성능 을 비교 하 는 것 도 있 습 니 다. 제 가 지금 일 하고 있 는 회사 에 서 는 판단 조건 이 많 을 때 if else 를 사용 하 는 것 을 허락 하지 않 고 switch 로 if else 를 대체 할 수 없습니다.그럼 어떻게 해 야 돼 요?그래서 인터넷 에서 오랫동안 답 을 찾 았 더 니 드디어 방향 이 잡 혔 다.맵 대신 맵 의 키 는 판단 해 야 할 조건 이 고, value 는 조건 을 만족 시 킬 때 해 야 할 일이 다.그래서 나 는 내 생각 대로 if 에 관 한 도구 류 를 썼 다.
package com.asen.util;

import java.util.Map;

/**
 * @Decription: a function,can replace the 'if else' and 'switch'
 * @Author: Asen
 * @Date: Create in 16:36 2018/4/29 0029
 * @Email: [email protected]
 **/
public class IfFunction<K> {
   
   private Map<K, Function> map;
   
   /**
    * the IfFunction need a map to save keys and functions
    *
    * @param map a map
    */
   public IfFunction(Map<K, Function> map) {
      this.map = map;
   }
   
   /**
    * add key and function to the map
    *
    * @param key      the key need to verify
    * @param function it will be executed when the key exists
    * @return this.
    */
   public IfFunction<K> add(K key, Function function) {
      this.map.put(key, function);
      return this;
   }
   
   /**
    * Determine whether the key exists, and if there is, the corresponding method is executed.
    *
    * @param key the key need to verify
    */
   public void doIf(K key) {
      if (this.map.containsKey(key)) {
         map.get(key).invoke();
      }
   }
   
   /**
    * Determine whether the key exists, and if there is, the corresponding method is executed.
    * otherwise the defaultFunction is executed.
    *
    * @param key             the key need to verify
    * @param defaultFunction it will be executed when the key is not exists.
    */
   public void doIfWithDefault(K key, Function defaultFunction) {
      if (this.map.containsKey(key)) {
         map.get(key).invoke();
      } else {
         defaultFunction.invoke();
      }
   }
   
}
package com.asen.util;

/**
 * @Decription: the function of IfFunction's key
 * @Author: Asen
 * @Date: Create in 17:35 2018/4/29 0029
 * @Email: [email protected]
 **/
public interface Function {
   
   /**
    * need to do something
    */
   void invoke();
}
package com.asen.example;

import com.asen.util.IfFunction;

import java.util.HashMap;

/**
 * @Decription: the IfFunction test
 * @Author: Asen
 * @Date: Create in 12:39 2018/5/1 0001
 * @Email: [email protected]
 **/
public class Test {
   
   public static void main(String[] args) {
      
      IfFunction ifFunction = new IfFunction<>(new HashMap<>(5));
      
      ifFunction.add("hello", () -> System.out.println("  "))
            .add("helloWorld", () -> System.out.println(""))
            .doIfWithDefault("hello", () -> System.out.println("       key!"));
   }
}

혼자 쓰 니까 괜 찮 은 데 성능 이 어떤 지 모 르 겠 어 요.테스트 같은 거 안 해 봤 어!
프로젝트 소스 코드 주소:https://github.com/SmythAsen/if-util

좋은 웹페이지 즐겨찾기