Angenommen ich etwas wie das folgende tun:Wie kann ich ein EnumSet von generischen Varargs konstruieren?
public static <V> Set<V> setOf(V... elem)
{
Set<V> set = null;
if (elem[0] instanceof Enum)
set = Sets.newEnumSet(elem, elem[0].getClass()); OR
set = EnumSet.<V>noneOf(elem[0].getClass());
return set;
}
Weder von diesen oder mehrere andere Varianten scheinen zu arbeiten. Kann mir jemand erklären, was vor sich geht? Ich habe How do I get the type object of a genericized Enum? und einige andere ähnliche Fragen angeschaut, aber ich kann immer noch nicht funktionieren.
Aus Gründen, die nicht in dem vereinfachten Beispiel angegeben sind, kann ich V nicht deklarieren, um Enum zu erweitern; Deshalb habe ich überprüft, ob enum [0] eine Instanz von Enum ist. Ich wusste, dass Typ löschen den Typ von V verlieren würde, weshalb ich nicht für set = Sets.newEnumSet (V.class) versucht habe. –
EQvan
@EQvan Ich schlage vor, Sie bearbeiten Ihren Beitrag mit den Einschränkungen dann ... weil, warum versuchen, ein 'EnumSet' zu konstruieren ist 'V' darf nicht ein Enum sein? Sie müssen den Typ haben, um ein leeres EnumSet zu erstellen. –
Tunaki
Ich kann sicherstellen, dass es immer mindestens 1 Element gibt, und EnumSet.copyOf (Arrays.asList (elem)) ist genau, wo ich angefangen habe ... aber das gibt mir einen Fehler "Grenzen nicht übereinstimmen", den ich nicht vollständig verstehe . – EQvan