Страницы

Поиск по вопросам

суббота, 1 февраля 2020 г.

Enum для каждого enum

#java


Собственно, вопрос, как это выглядит?
Для примера возьмем:      

   public enum Transport{
        SHOTGUN, RIFLE, MINIGUN
   }

И вот для каждого перечисления нужно задать еще один enum для конкретной модели.
Как это будет выглядеть и как к этому обращаться?
изначально мне кажется что должна присутствовать строка   

    public Transport(Enum type){this.type = type};

Но ведь для каждого перечисления будет свое перечисление. И перечисление нельзя наследовать.
Подскажите.    


Ответы

Ответ 1



Определите интерфейс, который должны будут реализовывать ваши вложенные перечисления. public enum Transport { SHOTGUN(Type1.T11), RIFLE(Type2.T21), MINIGUN(Type3.T31); private Weapon weapon; Transport(Weapon weapon) { this.weapon = weapon; } public interface Weapon {}; public enum Type1 implements Weapon { T11, T12; } public enum Type2 implements Weapon { T21, T22; } public enum Type3 implements Weapon { T31, T32; } }

Ответ 2



с наследованием наверняка не получится... public class EnumManager { public enum ABC { A, B, C } public enum DEF { D, E, F } public enum GHJ { G, H, J } public enum Transport { SHOTGUN, RIFLE, MINIGUN } private static final Map < Transport, Enum < ? >[] > children = new HashMap < Transport, Enum < ? >[] > () ; static { children.put ( Transport.SHOTGUN, ABC.values () ) ; children.put ( Transport.RIFLE, DEF.values () ) ; children.put ( Transport.MINIGUN, GHJ.values () ) ; } public static Enum < ? >[] getChildren ( final Transport parent ) { return children.get ( parent ) ; } public static void main ( final String[] args ) { for ( final Transport t : Transport.values () ) { System.out.println ( Arrays.toString ( getChildren ( t ) ) ) ; } } } выводит: [A, B, C] [D, E, F] [G, H, J]

Комментариев нет:

Отправить комментарий