1つのjava]enumは複数のifゲートより優れている.

13367 ワード

最近javaを開発したとき、enumを使用すると便利で安全です.

1.例


ポケモンを例に
  • タイプ:池、番号1-李尚海さん
  • タイプ:火、番号4-Fire
  • タイプ:水、番号7-ベンド
  • タイプと番号情報を用いてポケモン名を区別する方法を作成した.
    しかし、これは役に立たず、if文の重なりだけが増えた.
    そして、ある場所で、違うifゲートを使う人がいると思います.
    最後にあまり多くのコードを書くのが好きではありません.本当に減らしたいです.
    public String getPokemonName (Pokemon pokemon) {
        String name = "";
    
        if(pokemon.getType().equals("grass") && pokemon.getNumber() == 1) {
            name = "이상해씨";
        }
        else if(pokemon.getType().equals("fire") && pokemon.getNumber() == 4) {
            name = "파이리";
        }
    lse if(pokemon.getType().equals("water") && pokemon.getNumber() == 7) {
            name = "꼬부기";
        }
    
        return name;
    }
    
    class Pokemon {
        private String type;
        private int number;
    }

    2.enumの使用


    似たような悩みがあると思います優雅な兄弟ブログJava Enum活用プログラムを積極的に参考にしました.
  • enumクラスに識別子
  • を作成する
  • 流、ランダろ過標識
  • を通過
  • 識別子から名前
  • が戻る.
    import java.util.Arrays;
    
    enum Pokemon {
        bulbasaur("이상해씨", "grass", 1),
        charmander("파이리", "fire", 4),
        squirtle("꼬부기", "water", 7),
        missingno("미씽노", "normal", 0);
    
    
        private String name;
        private String type;
        private int number;
    
        Pokemon(String name, String type, int number) {
            this.name = name;
            this.type = type;
            this.number = number;
        }
    
        // 타입, 번호를 기준으로 식별자 필터링
        public static Pokemon getPokemon (String type, int number) {
            return Arrays.stream(Pokemon.values())
                    .filter(x -> x.type.equals(type) && x.number == number)
                    .findAny()
                    .orElse(missingno);
        }
    
        // 필터링된 식별자의 이름 반환
        public static String getPokemonName (String type, int number) {
            return getPokemon(type, number).getName();
        }
    
        public String getName() {
            return this.name;
        }
    }
    
    class Main {
        public static void main(String[] args) {
    
            String name = Pokemon.getPokemonName("grass", 1);
    
            System.out.println("name " + name);
        }
    }

    3.メリット


    個人的に感じるメリットは
    1)ランダろ過はifゲートより安全である.
    2)時間的複雑度が類似している.
    3)enum自体はモノトーンでどこでも使える.
    4)lombokを使用すると、コードが本当に少なくなります.
    5)メンテナンスが容易.識別子をもう一つ追加すればいいです.

    4.参考


    Java Enum活用プログラム