En Java, comment créer un ensemble final rempli lors de la construction? Je veux faire quelque chose comme ceci:
static final Set<Integer> NECESSARY_PERMISSIONS
= new HashSet<Integer>([1,2,3,6]);
mais je ne connais pas la syntaxe appropriée en Java.
Essayez cet idiome:
import Java.util.Arrays;
new HashSet<Integer>(Arrays.asList(1, 2, 3, 6))
Vous pourriez envisager d'utiliser la goyave ImmutableSet
:
static final Set<Integer> NECESSARY_PERMISSIONS = ImmutableSet.<Integer>builder()
.add(1)
.add(2)
.add(3)
.add(6)
.build();
static final Set<String> FOO = ImmutableSet.of("foo", "bar", "baz");
Entre autres choses, c'est beaucoup plus rapide (et ~ 3 fois plus efficace en termes d'espace) que HashSet
.
Le moyen le plus simple, en utilisant les classes Java classes, est
static final Set<Integer> NECESSARY_PERMISSIONS =
Collections.unmodifiableSet(new HashSet<Integer>(Arrays.asList(1, 2, 3, 6)));
Mais vous pouvez également utiliser un initialiseur statique ou déléguer à une méthode statique privée:
static final Set<Integer> NECESSARY_PERMISSIONS = createNecessaryPermissions();
Notez le wrapper unmodifiableSet
, qui garantit que votre ensemble constant est en effet constant.
En utilisant la bibliothèque Google Guava , vous pouvez utiliser ImmutableSet
, qui est conçue exactement dans ce cas (valeurs constantes):
static final ImmutableSet<Integer> NECESSARY_PERMISSIONS =
ImmutableSet.of(1,2,3,6);
Façon old-school (sans bibliothèque):
static final Set<Integer> NECESSARY_PERMISSIONS =
new HashSet<Integer>(Arrays.asList(1,2,3,6));
MODIFIER:
Dans Java 9 + , vous pouvez utiliser Immutable Set Static Factory Methods :
static final Set<Integer> NECESSARY_PERMISSIONS =
Set.of(1,2,3,6);
Vous pouvez le faire de la manière suivante, l'OMI étant bien meilleure et plus concise que les autres exemples de cette rubrique:
public static <T> Set<T> set(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
après l'import statique, vous pouvez écrire quelque chose comme ceci:
public static final Set<Integer> INTS = set(1, 2, 3);
Set<String> s = new HashSet<String>() {{
add("1"); add("2"); add("5");
}};