2016-09-13 2 views
3

Ich muss Folgendes mit enum implementieren.Wie können wir auf Typ und Subtypen von Enum in Java zugreifen?

import java.util.*; 

/** 
* 
* @author mukesh 
*/ 
public class MyTest { 
private List<SubTypes> subTypes = new ArrayList<SubTypes>(); 
    enum Types { 
     PercentArea, StackedArea, ChartSubType3; 
    } 

    enum SubTypes { 
     PERSENTAREA1(Types.PercentArea), 
     PERSENTAREA2(Types.PercentArea), 
     PERSENTAREA3(Types.PercentArea), 
     STACKAREA1(Types.StackedArea), 
     STACKAREA2(Types.StackedArea), 
     STACKAREA3(Types.StackedArea);   

     Types t; 
     private SubTypes(Types t) {    
       this.t = t; 
      } 
     } 

     public List<SubTypes> getSubTypes() { 
      return Collections.unmodifiableList(subTypes); 
     }  

    public static void main(String[] args) {    
     /* How can i get SubTypes based on base type ??? */ 
    }} 

Beispiel:

in einer Combo Angenommen habe ich Types - PercentArea, StackedArea, ChartSubType3 usw. und wenn ich PercentArea dann zweite Combo wählen zum Beispiel Untertypen können PERSENTAREA1, PERSENTAREA2 etc.

Kann mir jemand sagen, wie ich alle Werte des Subtyps für bestimmte Typen abrufen kann.

+0

Was genau meinst du mit ‚? Wie kann ich Subtypen basierend auf Basistyp bekommen‘ – kujeensiti

+0

@ user3161880 Angenommen, in einem Combo habe ich Typen -PercentArea, StackedArea, ChartSubType3 usw. Angenommen, ich wähle PercentArea, dann kann zweite Combo Untertypen erhalten, z. PERSENTAREA1, PERSENTAREA2 usw. –

+1

Warum fügen Sie die Subtypen den Typen nicht direkt hinzu: 'PercentArea (SubTypes.PRESENTAREA1, SubTypes.PRESENTAREA2)' usw., anstatt die Typen als Eigenschaften der Subtypen zu haben. –

Antwort

2

Ich glaube, Sie so etwas wie dieses

private static void getSubTypes(Types type) 
{ 
    SubTypes[] values = SubTypes.values(); 
    for(SubTypes value : values) 
    { 
     if(value.t == type){ 
      System.out.println("found subtype "+ value); 
     } 
    } 

} 

Hoffnung brauchen, das hilft!

Viel Glück!

+0

Danke für Hilfe. 1Q ist das bekommen nur einzelne Werte oder mehrere Ich denke, es wird nur einzelne Wert richtig zurückgeben. –

+0

Ich denke, dass es helfen wird, danke. –

+0

aufgrund der for-Schleife, gibt es Ihnen alle Werte, wenn Sie möchten, dass diese Methode die Antwort zurückgibt, alle Werte in einem Array speichern und das Array zurückgeben – Vihar

1

Sie können SubType verwenden cahce wie folgt:

private static final Map<Types, List<SubTypes>> typesMap = new ConcurrentHashMap<>(); 

public static void addSubType(Types type, SubTypes subTypes){ 
    List<SubTypes> subTypeList; 
    synchronized (type) 
    { 
     subTypeList = typesMap.get(type); 
     if (subTypeList == null){ 
      typesMap.put(type, subTypeList = new LinkedList<>()); 
     } 
    } 
    subTypeList.add(subTypes); 
} 

public static List<SubTypes> getSybTypeList(Types type){ 
    return typesMap.get(type); 
} 

enum Types { 
    PercentArea, StackedArea, ChartSubType3; 
} 

enum SubTypes { 

    PERSENTAREA1(Types.PercentArea), PERSENTAREA2(Types.PercentArea), PERSENTAREA3(Types.PercentArea), STACKAREA1(
      Types.StackedArea), STACKAREA2(Types.StackedArea), STACKAREA3(Types.StackedArea); 

    Types t; 

    private SubTypes(Types t) { 
     this.t = t; 
     addSubType(t, this); 
    } 
} 
Verwandte Themen