Sal*_*Sal 18 java initialization declaration set
在Java中,如何创建在构造时填充的最终Set?我想做类似以下的事情:
static final Set<Integer> NECESSARY_PERMISSIONS
= new HashSet<Integer>([1,2,3,6]);
Run Code Online (Sandbox Code Playgroud)
但我不知道Java中的正确语法.
Tom*_*icz 57
试试这个成语:
import java.util.Arrays;
new HashSet<Integer>(Arrays.asList(1, 2, 3, 6))
Run Code Online (Sandbox Code Playgroud)
Pau*_*ora 19
您可以考虑使用Guava 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");
Run Code Online (Sandbox Code Playgroud)
除此之外,它明显更快(并且空间效率提高约3倍)HashSet.
使用标准Java类的最简单方法是
static final Set<Integer> NECESSARY_PERMISSIONS =
Collections.unmodifiableSet(new HashSet<Integer>(Arrays.asList(1, 2, 3, 6)));
Run Code Online (Sandbox Code Playgroud)
但您也可以使用静态初始化程序,或委托给私有静态方法:
static final Set<Integer> NECESSARY_PERMISSIONS = createNecessaryPermissions();
Run Code Online (Sandbox Code Playgroud)
请注意unmodifiableSet包装器,它保证您的常量集确实是常量.
使用您可以使用的Google Guava库ImmutableSet,它完全针对这种情况设计(常量值):
static final ImmutableSet<Integer> NECESSARY_PERMISSIONS =
ImmutableSet.of(1,2,3,6);
Run Code Online (Sandbox Code Playgroud)
老派方式(没有任何图书馆):
static final Set<Integer> NECESSARY_PERMISSIONS =
new HashSet<Integer>(Arrays.asList(1,2,3,6));
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式执行此操作,与本主题中的其他示例相比,IMO更好,更简洁:
public static <T> Set<T> set(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
Run Code Online (Sandbox Code Playgroud)
静态导入后,您可以编写如下内容:
public static final Set<Integer> INTS = set(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38740 次 |
| 最近记录: |