Iterate enum values using java generics

前端 未结 10 1016
余生分开走
余生分开走 2020-12-02 10:55

I\'m trying to find a way to iterate through an enum\'s values while using generics. Not sure how to do this or if it is possible.

The following code illustrates

10条回答
  •  天命终不由人
    2020-12-02 11:24

    If you declare Filter as

    public class Filter
    

    then

    import java.util.Iterator;
    
    public enum TimePeriod implements Iterable {
        ALL("All"),
        FUTURE("Future"),
        NEXT7DAYS("Next 7 Days"),
        NEXT14DAYS("Next 14 Days"),
        NEXT30DAYS("Next 30 Days"),
        PAST("Past"),
        LAST7DAYS("Last 7 Days"),
        LAST14DAYS("Last 14 Days"),
        LAST30DAYS("Last 30 Days");
    
        private final String name;
    
        private TimePeriod(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return name;
        }
    
        public Iterator iterator() {
            return new Iterator() {
    
                private int index;
    
                @Override
                public boolean hasNext() {
                    return index < LAST30DAYS.ordinal();
                }
    
                @Override
                public TimePeriod next() {
                    switch(index++) {
                        case    0   : return        ALL;
                        case    1   : return        FUTURE;
                        case    2   : return        NEXT7DAYS;
                        case    3   : return        NEXT14DAYS;
                        case    4   : return        NEXT30DAYS;
                        case    5   : return        PAST;
                        case    6   : return        LAST7DAYS;
                        case    7   : return        LAST14DAYS;
                        case    8   : return        LAST30DAYS;
                        default: throw new IllegalStateException();
                    }
                }
    
                @Override
                public void remove() {
                    throw new UnsupportedOperationException();
                }
            };
        }
    }
    

    And usage is quite easy:

    public class Filter {
        private List availableOptions = new ArrayList();
        private T selectedOption;
    
        public Filter(T selectedOption) {
            this.selectedOption = selectedOption;
            Iterator it = selectedOption.iterator();
            while(it.hasNext()) {
                availableOptions.add(it.next());
            }
        }
    }
    

提交回复
热议问题