5

抽象メソッドのパラメーターとしてジェネリック EnumMap を使用しようとしました。私の問題は、EnumMap の既存の列挙型を使用して抽象メソッドを実装すると、オーバーライド アノテーションを削除してスーパー メソッドを実装する必要があることをコンパイラが通知することです。

ここに私の抽象クラスがあります:



    import java.util.EnumMap;
    import java.util.HashMap;

    public abstract class AbstractClazz {

        // The methode I tried to define
        public abstract <K extends Enum<K>> boolean isVisible(EnumMap<K, Object> visibleConditions);

        // second test
        public abstract <K> boolean isVisible2(HashMap<K, Object> visibleConditions);

        // third test
        public abstract boolean isVisible3(EnumMap<?, Object> visibleConditions);
    }

そして実装クラス:



    import java.util.EnumMap;
    import java.util.HashMap;

    public class Clazz extends AbstractClazz {

        public enum Numbers {
            ONE, TWO, THREE
        }

        // Error: The method isVisible(EnumMap<Clazz.Numbers,Object>) of type Clazz must override or implement a supertype method
        @Override
        public boolean isVisible(EnumMap<Numbers, Object> visibleConditions) {
            return false;
        }

        // Error: The method isVisible2(HashMap<Clazz.Numbers,Object>) of type Clazz must override or implement a supertype method
        @Override
        public boolean isVisible2(HashMap<Numbers, Object> visibleConditions) {
            return false;
        }

        // Error: The method isVisible3(EnumMap<Numnbers,Object>) of type Clazz must override or implement a supertype method
        @Override
        public boolean isVisible3(EnumMap<Numnbers, Object> visibleConditions) {
            return false;
        }
    }

多分私はばかげているかもしれませんが、何が間違っていますか?

誰でも私を助けることができますか?

4

1 に答える 1

2

メソッドだけでなく、クラスを入力する必要があります。これを試して:

import java.util.EnumMap;
import java.util.HashMap;

public abstract class AbstractClazz<K extends Enum<K>> {

    public abstract boolean isVisible(EnumMap<K, Object> visibleConditions);
}

と:

import java.util.EnumMap;

public class Clazz extends AbstractClazz<Numbers> {

    @Override
    public boolean isVisible(EnumMap<Numbers, Object> visibleConditions) {
        return false;
    }
}

編集:それを機能させるには、Numbers列挙型を独自のファイルに入れます:

public enum Numbers {
    ONE, TWO, THREE
}
于 2014-12-06T09:57:16.633 に答える