Typ enum

0

Mam kilkanaście klas X1, X2.. XN, w każdej jest zdefiniowany publiczny typ enum (nazwa typu enum jest taka sama w tych klasach, np. SortTyp, wartości są różne). Dodatkowo wszystkie te klasy X1..XN są dziedziczone z tego samego przodka.

W jaki sposób zaimplementować parametr jakiejś metody jako jeden z tych kilkunastu typów enum, po to aby dalej w tej metodzie wykonać pętlę po wszystkich pozycjach danego enum ?
Poniżej przykład dla konkretnej klasy, ja potrzebuję aby parametrem metody był typ enum jednej z tej kilkunastu klas X1...XN

//definicja metody
public String findEnum(X1.SortTyp sort) {
	
	//pętla po wszystkich polach X1.SortTyp

}
0

Zapytanie: "java loop over enum"
Pierwsza odpowiedź:

http://stackoverflow.com/questions/1104975/a-for-loop-to-iterate-over-an-enum-in-java

Z tego co piszą po prostu użyj X1.SortTyp.values() w for-each.

1

Enum, to w uproszczeniu klasa która posiada kilka zdefiniowanych singletonów. I tak może np. implementować interfejs. Jeżeli więc będą implementować interfejs:

import java.util.Arrays;
import java.util.List;

enum X1 implements EnumGroupElement<X1>{
    V1,
    V2;

    @Override
    public List<Enum<X1>> groupValues() {
        return Arrays.asList(values());
    }

}

enum X2 implements EnumGroupElement<X2>{
    V2,
    V3,
    V4;


    @Override
    public List<Enum<X2>> groupValues() {
        return Arrays.asList(values());
    }
}

interface EnumGroupElement<T extends Enum<T>> {
    List<Enum<T>> groupValues();
}

I wykonanie:

public void foo(EnumGroupElement<?> enumGroupElement){
   List<? extends Enum<?>>  enumGroup = enumGroupElement.groupValues(); //Lista wszystkich wartości danego enum
   ...
}

Zauważ że X1.V2 != X2.V2

0
  1. Utworzyłem interfejs (oddzielny plik EnumGroupElement.java) :
package pl.iz.table;
import java.util.List;

public interface EnumGroupElement <T extends Enum<T>> {
    List<Enum<T>> groupValues();
}
  1. W mojej istniejącej klasie (nazwa pliku TblComplaintSort.java),
    '''
    public class TblComplaintSort extends TblBaseSort<ComplDto> {
    '''

dodałem:

	public enum X1 implements EnumGroupElement<X1>{
	    V1,
	    V2;
	 
	    @Override
	    public List<Enum<X1>> groupValues() {
	        return Arrays.asList(values());
	    }
	 
	}
2

Trochę pokręciłem z pamięci. Tutaj masz kod który sprawdziłem :P.


import java.util.Arrays;
import java.util.List;

public class Main {

    public static void main(String... args) {
        System.out.println("-X1-");
        printAllFromGroup(X1.V2);

        System.out.println("-X2-");
        printAllFromGroup(X2.V2);

    }

    public static void printAllFromGroup(EnumGroupElement<?> enumGroupElement) {
        List<? extends Enum<?>> enumGroup = enumGroupElement.groupValues(); //Lista wszystkich wartości danego enum
        enumGroup.forEach(e -> System.out.println(e.name()));
    }
}



enum X1 implements EnumGroupElement<X1>{
    V1,
    V2;

    public List<X1> groupValues() {
        return Arrays.asList(values());
    }
}

enum X2 implements EnumGroupElement<X2>{
    V2,
    V3,
    V4;

    public List<X2> groupValues() {
        return Arrays.asList(values());
    }
}

interface EnumGroupElement<T extends Enum<T>> {
    List<T> groupValues();
}


OUTPUT

-X1-
V1
V2
-X2-
V2
V3
V4

1 użytkowników online, w tym zalogowanych: 0, gości: 1