3

これまで列挙型を使用したことがないので、非常に混乱しています。多くの RGB 値を (文字列として) 保存したいのですが、静的な最終文字列の負荷をリストするクラスではなく、列挙型が最適なオプションであると思いますか? 私はコードを試していますが、これまでに得たものは次のとおりです。これは正しいですか? (正常に動作するようです)

public enum Colors {
    GREY("142, 142, 147"),
    RED("255, 59, 48"),
    GREEN("76, 217, 100"),
    PURPLE("88, 86, 214"),
    LIGHTBLUE ("52, 170, 220");    //... etc, this is a shorted list

    private Colors(final String string) {
        this.string = string;
    }

    private final String string;

    public String getRGB() {
        return string;
    }
}

public class HelloWorld{
    public static void main(String[] args) {

        String test = Colors.LIGHTBLUE.getRGB();
        System.out.println(test);

    }
}
4

3 に答える 3

7

おそらく次のように変更します。

public enum Colors {
    GREY(142, 142, 147),
    RED(255, 59, 48),
    GREEN(76, 217, 100),
    PURPLE(88, 86, 214),
    LIGHTBLUE (52, 170, 220);    //... etc, this is a shorted list

    private final int r;
    private final int g;
    private final int b;
    private final String rgb;

    private Colors(final int r,final int g,final int b) {
        this.r = r;
        this.g = g;
        this.b = b;
        this.rgb = r + ", " + g + ", " + b;
    }

    public String getRGB() {
        return rgb;
    }

    //You can add methods like this too
    public int getRed(){
        return r;
    }

    public int getGreen(){
        return g;
    }

    public int getBlue(){
        return r;
    }

    //Or even these
    public Color getColor(){
        return new Color(r,g,b);
    }

    public int getARGB(){
        return 0xFF000000 | ((r << 16) & 0x00FF0000) | ((g << 8) & 0x0000FF00) | b;
    }
}

3 つのコンポーネントを別々に (そして整数として) 保存することで、それらを使って多くの便利な操作を行うことができます。

3 つのコンポーネントをどのように簡単に個別に抽出できるか、および追加の方法に注意してください (単一の ARGB 整数として取得するなど、実装がはるかに簡単です)。

于 2013-11-08T11:30:25.580 に答える
2

コードは良さそうに見えますが、RGB 値を数値として保持することをお勧めします (実際には数値であるため)。次のようなコードを書き直すことができます。

public enum Colors {
GREY(142, 142, 147),
RED(255, 59, 48),
GREEN(76, 217, 100),
PURPLE(88, 86, 214),
LIGHTBLUE (52, 170, 220);    //... etc, this is a shorted list

private Colors(final Integer red, final Integer green, final Integer blue) {
    this.red = red;
    this.green = green;
    this.blue = blue;
}

private final Integer red, green, blue;

public String getRGB() {
    return red + "," + green + "," + blue;
}
}

public class HelloWorld{
public static void main(String[] args) {

    String test = Colors.LIGHTBLUE.getRGB();
    System.out.println(test);

}
}
于 2013-11-08T11:28:37.213 に答える
1

代わりにこの列挙型を使用してください:

public enum COLOR {
    GREY(142, 142, 147);

    private int red;
    private int blue;
    private int green;

    private COLOR(int r, int g, int b) {
        this.red = r;
        this.green = g;
        this.blue = b;
    }

    public int getRedValue() {
        return red;
    }

    public int getBlueValue() {
        return blue;
    }

    public int getGreenValue() {
        return green;
    }

    @Override
    public String toString() {
        return red + "," + green + "," + blue;
    }
}
于 2013-11-08T11:29:18.513 に答える