자바 ImmutableMap 사용 설명
4347 단어 자바ImmutableMap
자바 의 Immutable 대상:
쉽게 말 하면 하나의 대상 인 스 턴 스 가 변경 되 지 않 으 면 Immutable 의 대상 이 고 자바 SDK 가 제공 하 는 대량의 값 대상,예 를 들 어 String 등 은 모두 Immutable 의 대상 이다.
ImmutableMap 만 들 기:
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>().build();
생 성 할 때 값 넣 기:
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>()
.put("k1","v1")
.put("k2","v2")
.build();
생 성 후 변경 불가:
immutableMap.put("k1","v3");// java.lang.UnsupportedOperationException
ImmutableMap 에서 key 와 value 는 모두 null 일 수 없 으 며,null 값 을 넣 으 면 NPE 를 던 집 니 다.ImmutableMap 의 사용 장면:
알맞다
1.정확 한 설정,예 를 들 어 서로 다른 key 에 따라 서로 다른 요청 url
2.쓰기 단위 테스트
적합 하지 않다
1.key,value 는 알 수 없 는 매개 변수 로 null 이 발생 할 수 있 습 니 다.
guava 에서 ImmutableMap 사용 예시 및 장점
ImmutableMap 은 가 변 적 이지 않 고 라인 이 안전 합 니 다.그것 은 상수 맵 키 쌍 을 만 들 수 있 습 니 다.그 는 많은 조합 키 가 맞 는 방법 을 제공 했다.소스 코드 에 정적 내부 클래스 를 사용 하여 ImmutableMap 을 조립 하고 정적 내부 클래스 는 외부 클래스 의 보조 로 ImmutableMap 을 구축 하 며 내부 에 final 을 사용 하여 Array List 변 수 를 설명 했다.
public static class Builder<K, V>{
final ArrayList<Map.Entry<K, V>> entries = Lists.newArrayList();
public Builder() {}
public Builder<K, V> put(K key, V value)
{
this.entries.add(ImmutableMap.entryOf(key, value));
return this;
}
public Builder<K, V> put(Map.Entry<? extends K, ? extends V> entry)
{
K key = entry.getKey();
V value = entry.getValue();
if ((entry instanceof ImmutableEntry)) {
Preconditions.checkNotNull(key);
Preconditions.checkNotNull(value);
Map.Entry<K, V> immutableEntry = entry;
this.entries.add(immutableEntry);
}
else
{
this.entries.add(ImmutableMap.entryOf(key, value));
}
return this;
}
public Builder<K, V> putAll(Map<? extends K, ? extends V> map)
{
this.entries.ensureCapacity(this.entries.size() + map.size());
for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) {
put(entry.getKey(), entry.getValue());
}
return this;
}
public ImmutableMap<K, V> build()
{
return fromEntryList(this.entries);
}
private static <K, V> ImmutableMap<K, V> fromEntryList(List<Map.Entry<K, V>> entries)
{
int size = entries.size();
switch (size) {
case 0:
return ImmutableMap.of();
case 1:
return new SingletonImmutableBiMap((Map.Entry)Iterables.getOnlyElement(entries));
}
Map.Entry<?, ?>[] entryArray = (Map.Entry[])entries.toArray(new Map.Entry[entries.size()]);
return new RegularImmutableMap(entryArray);
}
}
이전에 우 리 는 수치 결 과 를 if else 형식 으로 사용 할 수 있다 고 판단 했다.
int a = 1;
if(a == 1) {
System.out.println(a);
} else {
System.out.println(a);
}
또는 switch 방식 사용:
int a = 1;
switch (a) {
case 1:
System.out.println(a);
break;
case 2:
System.out.println(a);
default:
System.out.println(a);
break;
}
현재 ImmutableMap 집합 을 사용 하여 키 값 을 조립 할 수 있 습 니 다.이러한 조합 방식 은 간단 하면 서도 많은 불필요 한 코드 를 절약 할 수 있 습 니 다.
ImmutableMap<String, Object> map = ImmutableMap .<String, Object>builder()
.put("1", "1")
.put("2", "2")
.put("3", "3")
.build();
ImmutableMap<String, String> map1 = ImmutableMap .<String, String>of("1", "2");
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.