私は言うことができる方法があります:
private static String drawCellValue(
int maxCellLength, String cellValue, String align) { }
お気づきのとおり、alignというパラメーターがあります。このメソッド内では、値が「左」または「右」であるかどうかのif条件があります。パラメータを文字列として設定すると、明らかに任意の文字列値を渡すことができます。それが可能かどうかを知りたいメソッドパラメータとしてEnum値を持つために、もしそうなら、どのように?
誰かがこれについて考える場合に備えて。ブール値を使用することを考えましたが、私は実際にはそれを空想しません。最初に、true/falseをleft/rightに関連付ける方法は? (OK、コメントを使用できますが、それでも汚れています)そして次に、「justify」などの新しい値を追加することを決定する可能性があります。したがって、2つ以上の可能な値がある場合、ブール型は間違いなく使用できません。
何か案は?
これはそれを行う必要があります:
private enum Alignment { LEFT, RIGHT };
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
if (align == Alignment.LEFT)
{
//Process it...
}
}
あなたはスイッチを使用することができます列挙型でさらにクール:
switch (align) {
case LEFT: {
// do stuff
break;
}
case RIGHT: {
// do stuff
break;
}
default: { //added TOP_RIGHT but forgot about it?
throw new IllegalArgumentException("Can't yet handle " + align);
}
}
例外の出力は、任意のint値ではなく、enum値の名前になるため、Enumはクールです。
私はこれがずっと好きです。 if/switchを減らしてください。
private enum Alignment { LEFT, RIGHT;
void process() {
//Process it...
}
};
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
align.process();
}
もちろん、それは次のとおりです。
String process(...) {
//Process it...
}
SwingConstants。{LEFT、RIGHT}も再利用できます。それらは列挙型ではありませんが、すでに存在し、多くの場所で使用されています。
もちろん、enumを使用できます。次のような作品はありますか?
enum Alignment {
LEFT,
RIGHT
}
private static String drawCellValue(int maxCellLength、String cellValue、Alignment alignment){}
ブール値を使用する場合は、alignパラメーターの名前をalignLeftなどに変更できます。この実装はそれほどきれいではないことに同意しますが、多くの変更を予期せず、これがパブリックインターフェイスでない場合は、良い選択かもしれません。
次のように、上記のパラメーターで列挙型を使用できます。
public enum Alignment { LEFT, RIGHT }
private static String drawCellValue(
int maxCellLength, String cellValue, Alignment align) {}
その後、switchまたはifステートメントを使用して、実際に上記のパラメーターで何かを行うことができます。
switch(align) {
case LEFT: //something
case RIGHT: //something
default: //something
}
if(align == Alignment.RIGHT) { /*code*/}
本格的なクラスとして列挙型を使用するかどうかはわかりません-これはオブジェクト指向言語であり、オブジェクト指向の最も基本的な考え方の1つは、クラスが1つのことを実行し、それをうまく実行することです。
列挙型は列挙型としてかなり良い仕事をしており、クラスはクラスとして良い仕事をしています。私が感じている2つを混ぜると問題が発生します-たとえば、主に列挙型のインスタンスを作成できないため、列挙型のインスタンスをパラメーターとしてメソッドに渡すことはできません。
したがって、enum.process()を使用できる場合でも、そうする必要があるとは限りません。