0

私はこのようなことをしたい:

public class MyEnumTest {

    public enum MyEnum;
    private MyEnum value;

    public MyEnumTest(enum e)
    {
        this.MyEnum = e; 
        this.value = this.MyEnum.values[0]//Set value to the first enum value.
    }

    public void setValue(MyEnum e)
    {
        this.value = e; 
    }

    public MyEnum getValue()
    {
        return value;
    }

}

そしてそれをこのようなものと呼びます:

MyEnumTest car = new MyEnumTest({HONDA, FORD, TOYOTA, HOLDEN}); 
MyEnumTest fruit = new MyEnumTest({APPLE, BANANA, CHERRY}); 

/* some operations occur*/ 

if (car.getValue() == car.FORD) System.out.println("Vrooom!"); 
if (fruit.getValue()) == fruit.APPLE) System.out.println ("Is red and round and delicious"); 

これを行うためのアイデアはありますか?

ボーナスマークの場合-列挙値を使用して初期値を設定することは可能ですか?例:

MyEnumTest myET = new myEnumTest(new enum {RED, GREEN, BLUE, YELLOW}, BLUE); 
4

3 に答える 3

6

enum(キーワードなしで)使用できます:

public MyEnumTest(MyEnum e)
{
    this.myEnum = e; 
    this.value = MyEnum.values()[0];
}

パート2では、オーバーロードされたコンストラクターを定義できます。

public MyEnumTest(MyEnum[] myEnums) {

および使用する:

MyEnumTest myET = new MyEnumTest(new MyEnum[] { MyEnum.FOO, ... });
于 2012-11-09T02:17:00.573 に答える
3

他の人が言ったように、あなたがやろうとしていることを理解するのは難しいですが、ここに私の最善の推測があります:

public enum Color {
    RED, GREEN, YELLOW, BLUE;
}


public class MyEnumTest<E extends Enum<E>> {
    private final Class<E> enumType;
    private final E value; 

    public Class<E> getEnumType() {
        return enumType;
    }

    public E getValue() {
        return value;
    }

    public MyEnumTest(Class<E> enumType, E value) {
        this.enumType = enumType;
        this.value = value;
    }

    public MyEnumTest(Class<E> enumType) {
        this(enumType, enumType.getEnumConstants()[0]);
    }

    public static void main(String... args) {
        // no initial value provided
        MyEnumTest<Color> myET = new MyEnumTest<Color>(Color.class);
        if (myET.getValue() == Color.RED) {
            System.out.println("It's probably an apple");
        }

        // providing an initial value
        myET = new MyEnumTest<Color>(Color.class, Color.YELLOW);
        if (myET.getValue() == Color.YELLOW) {
            System.out.println("It's probably a banana");
        }
    }
}

また、列挙値は静的であることに注意してください...したがって、 myET.MyEnum.RED のようなものは意味がありません...代わりに使用する必要があります: Color.RED

于 2012-11-09T03:08:10.253 に答える
1

あなたが何をしようとしているのか見分けるのは難しいです。レイメウスの答えは、あなたの特定のものを議論としてどうするかを示していMyEnumます。列挙型を使用するようにクラスを実装する場合は、次を使用します。

public class MyEnumTest<E extends Enum<E>> {

    private final E firstValue;

    public MyEnumTest(Class<E> enumType)
    {
        this.firstValue = enumType.getEnumConstants()[0];
    }

    ...
}

そして、次のようにインスタンス化します。

MyEnumTest myET = new myEnumTest(MyEnum.class);
于 2012-11-09T02:28:46.687 に答える