2014-12-06 4 views
4

Я попытался использовать общий EnumMap как параметр в абстрактном методе. Моя проблема в том, что когда я реализую абстрактный метод с существующим enum для 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; 
     } 
    } 

Может быть И слишком глупо, но что я делаю не так?

Может ли кто-нибудь мне помочь?

+0

Я думаю, что не так много усиления с помощью ' EnumMap как сырые типы. Используйте их правильно с параметрами типа. –

ответ

1

Вы должны набирать классы, а не только свои методы. Попробуйте это:

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; 
    } 
} 

EDIT: Для того, чтобы сделать его работу, поставить Число перечисления в своем собственном файле:

public enum Numbers { 
    ONE, TWO, THREE 
} 
+0

Но почему методы печати не работают? –

+0

Потому что тогда вам нужно иметь такую ​​же подпись и в ваших подклассах. Если вы реализуете метод из суперкласса, вы не можете ограничивать параметры. –

+0

Спасибо за ваш очень быстрый ответ. Но теперь у меня есть проблема, что компилятор не может разрешить номера классов в определении класса. – Dackelkotze

Смежные вопросы