2

このような基本列挙型を探しています...

public enum SessionState {

    WAITING(true), VOTING(true), PREPARING(false), PLAYING(false), ENDING(false);

    boolean newPlayersJoin;

    private SessionState(boolean newPlayersJoin){
        this.newPlayersJoin = newPlayersJoin;
    }

    public boolean canNewPlayersJoin(){
        return newPlayersJoin;   
    }

}

...そして、同じ値 (WAITING、VOTING、PREPARING、PLAYING、ENDING) を持つ別の列挙型ですが、より多くの機能があります。追加のメソッドのない基本列挙型が必要な理由は、一部のメソッドが、その jar ファイル (マルチモジュール プロジェクト) に含まれない関数に依存しているためです。

私の他の列挙型は次のようになります

public enum SessionStateCopy {

    WAITING(true, ... extra values), VOTING(true, ... extra values), PREPARING(false, ... extra values), PLAYING(false, ... extra values), ENDING(false, ... extra values);

    boolean newPlayersJoin;

    private SessionStateCopy(boolean newPlayersJoin, ... extra values){
        this.newPlayersJoin = newPlayersJoin;
    }

    public boolean canNewPlayersJoin(){
        return newPlayersJoin;   
    }

    ... extra methods

}
4

2 に答える 2

2

enumJava の s は暗黙的finalに であるため、相互に継承することはできません。OPにあるように、2つの異なるenums があり、それらの間で変換するためのメソッドをいくつか追加します。

public static SessionState convert(SessionStateCopy s) {
    return SessionState.valueOf(s.name());
}

public static SessionStateCopy convert(SessionState s) {
    return SessionStateCopy .valueOf(s.name());
}

誤って一方に値を追加して他方には追加しないようにするために、JUnit テストを追加してこれを確認します。

// imports snipped for clarity
public class SessionStateTest() {

    public void testMatchingMembers() {
        assertEquals("wrong number of values", SessionState.values().size(), SessionStateCopy.values().size());
        for (SessionState s: SessionState.values()) {
            assertEquals ("wrong value", s, convert(convert(s));
        }
    }
}
于 2013-11-08T18:17:24.130 に答える
0

私があなたの質問を正しく理解しているなら、あなたはenumを拡張したいと思っていenumます。

できません。

enumただし、同じ を実装する2 つの を使用できますinterface

機能が劣っているものは、すべてのメソッドを実装しますが、何もしません。

もう 1 つは、 のメソッドの「便利な」実装を提供しinterfaceます。

例えば:

enum Foo { // "extends Bar" would not compile
    FOO();
}
interface Blah {
    void meh();
}
enum Bar implements Blah {
    SOMETHING();
    public void meh() {
        // nope     
    }
}
enum GreatBar implements Blah {
    SOMETHING();
    public void meh() {
        System.out.println("I'm doing something here!");
    }
}
于 2013-11-08T18:15:52.060 に答える