References

...base

문자(열) 관련

Ascii

아스키 문자(열)에 대한 상수, 유틸리티 제공

CharMatcher

char 단위 문자(열)에 대한 매칭 수행. 보충 평면 글자는 지원하지 않음에 주의

Joiner

  • 각 객체의 toString() 결과를 Appendable 객체에 append
  • skipNulls(), useForNull(String) 설정이 없는 경우, null 인자에 대해 NullPointerException 발생

↓java

static Joiner on(String separator) Joiner.MapJoiner withKeyValueSeparator(String keyValueSeparator) <A extends Appendable> appendTo(A appendable, ...) String join(...)

Splitter

고정된 구분자(패턴)을 이용해 겹치지 않는 부분 문자열 획득

↓java

static Splitter fixedLength(int length) // 고정 길이로 자르기 static Splitter on(Pattern separatorPattern) Splitter limit(int maxItems) Splitter omitEmptyStrings() Splitter trimResults() // 연속되는 공백 문자 제거 Splitter trimResults(CharMatcher trimmer) // trimmer에 해당하는 모든 연속적인 문자 제거 Splitter.MapSplitter withKeyValueSeparator(Splitter keyValueSplitter) Iterable<String> split(CharSequence sequence) List<String> splitToList(CharSequence sequence) Stream<String> splitToStream(CharSequence sequence)

Strings

↓java

static String nullToEmpty(String string) static String emptyToNull(String string) static boolean isNullOrEmpty(String string) static String repeat(String string, int count) static String padStart(String string, int minLength, char padChar) static String commonPrefix(CharSequence a, CharSequence b) // + commonSuffix

GC

FinalizableReference

↓java

void finalizeReferent() // GC 이후 실행할 작업 정의

FinalizableSoftReference<T>

SoftReference + FinalizableReference

FinalizableWeakReference<T>

WeakReference + FinalizableReference

FinalizablePhantomReference<T>

PhantomReference + FinalizableReference

FinalizableReferenceQueue

백그라운드 스레드로 FinalizableReference::finalizeReferent()를 실행하는 ReferenceQueue

ETC

Converter<A,B>

A -> B, B -> A 양방향 변환이 존재할 때, 그 변환

↓java

static <A,B> Converter<A,B> from(Function<? super A,? extends B> forwardFunction, Function<? super B,? extends A> backwordFunction) B convert(A a) // null은 항상 null로 Iterable<B> convertAll(Iterable<? extends A> fromIterable) Converter<B,A> reverse() <C> Converter<A,C> andThen(Converter<B,C> secondConverter)

Defaults

자바 언어 명세에 따라 임의 타입에 대한 기본값을 반환

Enums

↓java

static Field getField(Enum<?> enumValue) static <T extends Enum<T>> Optional<T> getIfPresent(Class<T> enumClass, String value) static <T extends Enum<T>> Converter<String,T> stringConverter(Class<T> enumClass) // Enum.name()을 이용한 Converter 반환

Preconditions

  • 사전조건이 충족되지 않은 경우에만 예외 메시지 포매팅을 수행한다
  • 다만 메서드 인자는 항상 계산 수행된다. 이마저도 피하고 싶다면 try ... catch 구문을 이용하면 된다

  • 포매팅 문자열은 %s만 지원한다

↓java

static void checkArgument(boolean expression, errorMessage(Template)[, errorMessageArgs]) // 메서드 매개변수 테스트 static void checkState(boolean expression, errorMessage(Template)[, errorMessageArgs]) // 인스턴스 상태 테스트 static <T extends Object> checkNotNull(T obj, errorMessage(Template)[, errorMessageArgs])

Stopwatch

  • System.nanoTime()을 이용하여 경과 시간 측정
  • ↓Android의 경우

    // 앱이 슬립 상태가 되면 더 이상 실행되지 않으므로, Stopwatch.createStarted( new Ticker() { public long read() { return android.os.SystemClock.elapsedRealtimeNanos(); } });
  • 벽시계 System.currentTimeMillis()는 근사값이며, 주기적인 조정을 거치므로 부정확하다

↓java

static Stopwatch createStarted() static Stopwatch createUnstarted() Stopwatch start() + stop, reset boolean isRunning() Duration elapsed() long elapsed(TimeUnit desiredUnit)

Suppliers

↓java

static <F,T> Supplier<T> compose(Function<? super F,T>, Supplier<F> supplier) static <T> Supplier<T> memoize(Supplier<T> delegate) static <T> Supplier<T> memoizeWithExpiration(Supplier<T> delegate, long duration, TimeUnit unit) static <T> Supplier<T> ofInstance(T instance) static <T> Function<Supplier<T>,T> supplierFunction() static <T> Supplier<T> synchronizedSupplier(Supplier<T> delegate)

Throwables

↓java

static String getStackTraceAsString(Throwable throwable)

Verify

  • 사전조건이 충족되지 않은 경우에만 예외 메시지 포매팅을 수행한다
  • 다만 메서드 인자는 항상 계산 수행된다. 이마저도 피하고 싶다면 try ... catch 구문을 이용하면 된다

  • 포매팅 문자열은 %s만 지원한다

↓java

static void verify(boolean expression, errorMessage(Template)[, errorMessageArgs]) static <T> T verifyNotNull(T reference, errorMessage(Template)[, errorMessageArgs])

...cache

Cache<K,V>

스레드-안전한 캐시. 보통 CacheBuilder로 인스턴스 획득

↓java

V getIfPresent(Object key) V get(K key, Callable<? extends V> loader) // 캐시에 없으면 loader를 통해 새로 저장하고 반환 ImmutableMap<K,V> getAllPresent(Iterable<?> keys) ConcurrentMap<K,V> asMap() void put(K key, V value) void putAll(Map<? extends K,​? extends V> m) void invalidate(Object key) void invalidateAll(Ierable<?> keys) long size() CacheStats stats() // 구현에 따라 기록 여부가 다를 수 있다 // CacheBuilder의 경우, recordStats()를 호출한 경우에만 기록 void cleanUp() // 구현에 따라 필요한 경우, 정리 연산 수행

LoadingCache<K,V>

키가 캐시에 없는 경우(벌크 연산 getAll 포함) loader를 통해 새로 저장하고 반환한다

↓java

V get(K key) // getUnchecked(K)의 경우 RuntimeException을 던진다 ImmutableMap<K,V> getAll(Iterable<? extends K> keys) void refresh(K key) // loader를 통해 값을 갱신한다

CacheBuilder<K,V>

  • 자동 loading 설정 가능
  • LRU 옵션 설정 가능
  • 마지막 접근/쓰기 후 t 시간 경과하면 자동 삭제 설정 가능
  • 키/값 자동 WeakReference 래핑 설정 가능
  • WeakReference 사용 설정된 경우, equals() 대신 identity(==) 비교를 이용한다

  • 삭제된 엔트리에 대한 리스너 설정 가능
  • 캐시 통계 기록 가능
  • CacheBuilder를 통해 만든 캐시는 직렬화/역직렬화 가능하다. 다만, 캐시 설정 정보만 저장/복원된다
  • refresh 연산은 기본적으로 LoadingCache.refresh(K) -> CacheLoader.reload(K, V)를 통해 수행된다

↓java

<K1 extends K,V1 extends V> CacheBuilder<K1,V1> weigher(Weigher<? super K1,? super V1> weigher) // Weigher : (key, value) 쌍으로부터 상대적인 우선순위를 반환. 낮을수록 높다 // 호출 객체와 다른 객체가 반환되나, 둘 다 이용 가능하다. 다만 반환된 제네릭 객체는 타입-안전이 보장된다 CacheBuilder<K,V> ticker(Ticker ticker) // 지정하지 않은 경우 System.nanoTime()을 기본 사용 <K1 extends K,V1 extends V> CacheBuilder<K1,V1> removalListener(RemovalListener<? super K1,? super V1> listener) // 이 안에서 발생하는 예외는 전파되지 않고 Logger로만 기록된다 // GC로 인해 제거된 경우, 키/값은 null일 수 있다 <K1 extends K,V1 extends V> Cache<K1,V1> build() <K1 extends K,V1 extends V> LoadingCache<K1,V1> build(CacheLoader<? super K1,V1> loader)

CacheBuilderSpec

  • 캐시 설정을 외주할 수 있다
  • ↓java

    var spec = "maximumSize=10000,expireAfterWrite=10m"; var graphs = CacheBuilder.from(spec) .removalListener(MY_LISTENER) .build( new CacheLoader<Key, Graph>() { public Graph load(Key key) throws AnyException { return createExpensiveGraph(key); } });
  • Duration은 정수 + [smhd]로 표현
concurrencyLevel=[integer]CacheBuilder.concurrencyLevel
initialCapacity=[integer]CacheBuilder.initialCapacity
maximumSize=[long]CacheBuilder.maximumSize
maximumWeight=[long]CacheBuilder.maximumWeight
expireAfterAccess=[duration]CacheBuilder.expireAfterAccess(Duration)
expireAfterWrite=[duration]CacheBuilder.expireAfterWrite(Duration)
refreshAfterWrite=[duration]CacheBuilder.refreshAfterWrite(Duration)
weakKeysCacheBuilder.weakKeys()
softValuesCacheBuilder.softValues()
weakValuesCacheBuilder.weakValues()
recordStatsCacheBuilder.recordStats()

CacheLoader<K,V>

  • LoadingCache에 사용되는 값 생성기
  • 보통 load(K)만 구현하는 것으로 충분하다. 나머지는 선택적

↓java

static <K,V> CacheLoader<K,V> from(Function<K,V> function) static <K,V> CacheLoader<K,V> asyncReloading(CacheLoader<K,V> loader, Executor executor) // reload()가 동기적인 경우에만 유용 abstract V load(K key) // 최초 값 생성 ListenableFuture<V> reload(K key, V value) // 기존 값을 대체할 값 생성

RemovalListeners

↓java

static <K,V> RemovalListener<K,V> asynchronus(RemovalListener<K,V> listener, Executor executor)

Cache 대리자

ForwardingCache, ForwadingCache.SimpleForwardingCache, ForwadingLoadingCache, ForwadingLoadingCache.SimpleForwardingLoadingCache

...collect

Collection types

ImmutableCollection<E>

  • 래핑한 collection을 변경하면 내용이 바뀌는 Collections.unmodifiableCollection()보다 강력
  • null 원소를 허용하지 않는다
  • 스레드-안전하다
  • ImmutableList, ImmutableSet, ImmutableSortedSet, ImmutableMap, ImmutableSortedMap, ImmutableBiMap, ImmutableMultiset, ImmutableMultimap, ImmutableListMultimap, ImmutableSetMultimap, ImmutableTable
  • ImmutableCollection.Builder<E>, ImmutableList.Builder<E> 등도 제공

BiMap<K,V>

  • 1:1 대응 관계를 표현한다
  • 구현체 : HashBiMap(K, V 둘 다 해시 가능), EnumBiMap(두 enum 간 대응), EnumHashBiMap

↓java

V forcePut(K key, V value) // put(K, V) 실행 전에 value와 관계된 모든 엔트리 제거 // 반환값 : 기존 key에 대응됐던 값 BiMap<V,K> inverse() // 반대 방향 뷰 반환

Multiset<E>

  • Bag으로도 불리는 자료형. 값의 중복을 허용(최대 Integer.MAX_VALUE)한다
  • 구현체 : HashMultiset(HashMap을 구현에 이용), LinkedHashMultiset(결정적 iteration), TreeMultiset(iteration 정렬 지정), EnumMultiset(모든 연산이 상수 시간), ConcurrentHashMultiset(동시성 추가, null 비허용)

Multimap<K,V>

  • 하나의 키에 대해 여러 값을 매핑
  • ListMultimap : List를 이용해 값 삽입 순서를 보존. 엔트리 중복 가능
  • 관련 구현체 : ArrayListMultimap, LinkedListMultimap

  • SetMultimap : Set을 이용해 값 중복 제거
  • 관련 구현체 : HashMultimap, LinkedHashMultimap(삽입 순 iteration)

  • SortedSetMultimap : 값집합을 정렬한 SetMultimap
  • 관련 구현체 : TreeMultimap(키/값 각각 정렬)

↓java

Map<K,Collection<V>> asMap() Multiset<K> keys() Collection<V> replaceValues(K key, Iterable<? extends V> values) // 이하 생략

↓Value uniqueness - ListMultimap

var m = MultimapBuilder.hashKeys().linkedListValues().<Integer, Integer>build(); m.put(1, 3); m.put(2, 3); m.put(1, 1); m.put(1, 2); m.put(1, 1); assertEquals(5, m.size()); // 키-값 쌍 중복 제거 X

↓Value uniqueness - SetMultimap

var m = MultimapBuilder.hashKeys().hashSetValues().<Integer, Integer>build(); m.put(1, 3); m.put(2, 3); m.put(1, 1); m.put(1, 2); m.put(1, 1); assertEquals(4, m.size()); // 키-값 쌍 중복 제거 O

Table<R,C,V>

  • (행 key, 열 key) 쌍에 대한 값을 보존
  • Sparse 데이터 표현에 좋다
  • 행/열 모두로 조회 가능하지만, 일부 구현은 열로 조회하는 경우 성능이 좋지 않을 수 있다
  • 메서드가 반환한 모든 Collection/Map은 테이블에 대한 writable view다
  • 구현에 따라 테이블 변경 메서드를 지원하지 않거나, 메서드가 반환한 Collection/Map이 writable하지 않을 수 있다

  • 구현체 : ArrayTable(고정 크기 2차원 배열 이용), HashBasedTable(linked hash table 이용), TreeBasedTable(행/열 키 각각을 정렬)

↓java

Set<Table.Cell<R,C,V>> cellSet() Map<C,V> row(R rowKey) + column Map<R,Map<C,V>> rowMap() + columnMap

ClassToInstanceMap<B>

  • Class -> instance 매핑
  • int.class와 Integer.class는 서로 다름에 유의

  • 제네릭 매핑에는 TypeToInstanceMap을 이용하면 된다
  • 구현체 : ImmutableClassToInstanceMap, MutableClassToInstanceMap

Queue

EvictingQueue<E>

add()시, 최대 개수에 도달했다면 head 요소 삭제. 논리적으로 circular buffer와 동일

MinMaxPriorityQueue<E>

  • A double-ended priority queue
  • 최대 원소에 대해서도 상수 시간 접근이 가능하며, 최대 원소에 대한 연산도 지원

  • 크기 제한을 설정하는 경우, 크기가 초과될 때마다 최대 원소 제거

Utility

Collections2

↓java

static <E> Collection<List<E>> permutations(Collection<E> elements) // + orderedPermutations

Comparators

↓java

static <T,​S extends T> Comparator<Iterable<S>> lexicographical​(Comparator<T> comparator) // Iterable을 사전순으로 정렬해준다 // e.g. [] < [1] < [1, 1] < [1, 2] < [2] // + isInOrder, isInStrictOrder static <T> Collector<T,​?,​List<T>> least​(int k, Comparator<? super T> comparator) // 최소 원소 k개를 고르는 스트림 최종연산 // + greatest static <T> T min​(@Nullable T a, @Nullable T b, Comparator<T> comparator) + max

ComparisonChain

↓java

ComparisonChain.start() .compare(this.aString, that.aString) .compare(this.anInt, that.anInt) .result()

Iterators + Iterables

↓java

static <T> Iterator<T> cycle(T... elements) static <T> PeekingIterator<T> peekingIterator(Iterator<? extends T> iterator) static <T> T[] toArray(Iterator<? extends T> iterator, Class<T> type) static int advance(Iterator<?> iterator, int numberToAdvance) static <T> Iterator<T> concat(...) static <T> Iterator<T> limit(Iterator<T>, int limitSize) static <T> Iterator<T> consumingIterator(Iterator<T> iterator) // 원소를 소비하면서 삭제. Iterator.remove()를 지원해줘야 다음 next()가 동작한다 static <T> UnmodifiableIterator<T> filter(Iterator<?> unfiltered, Class<T> desiredType) static <T> UnmodifiableIterator<T> mergeSorted(...) static <T> UnmodifiableIterator<List<T>> partition(...) + paddedPartition static <F,T> Iterator<T> transform(Iterator<F> fromIterator, Function<? super F,? extends T> function) static <T> boolean addAll(Collection<T> addTo, Iterator<? extends T> iterator) // + removeAll, retainAll, removeIf static <T> boolean all(Iterator<T> iterator, Predicate<? super T> predicate) // + any, contains, elementsEqual static <T> T find(Iterator<T> iterator, Predicate<? super T> predicate) // + tryFind static int frequency(Iterator<?> iterator, Object element // + indexOf, size static <T> T get(Iterator<? extends T> iterator, int position, T defaultValue) // + getLast, getNext, getOnlyElement

Lists

Cartesian product, (Array|Linked|CopyOnWrite)List 생성 등

Maps

Set과 Function<K,V>를 이용한 Map 생성, 두 Map 사이의 차분, 필터링, 신규 맵 생성 등

MapMaker

  • 유사 ConcurrentHashMap을 만든다
  • weakKeys()를 지정하는 경우 equals() 대신 identity(==) 비교를 이용한다

Multimaps

Map<K, Collection<V>>로 변환, 필터링, Multimap<V,K>로 변환, 엔트리 일괄 변경 등

MultimapBuilder<K0,​V0>

  • K0, V0 : 각각 키, 값 upper bound
  • hashKkeys() : hash table 사용
  • linkedHashKeys() : hash table 사용 + 키 삽입 순서 기록
  • treeKeys() : TreeMap 사용
  • enumKeys() : EnumMap 사용

Multisets

Multiset 사이의 포함 관계, difference, sum, union 등

ObjectArrays

배열 접합, 새 배열 할당

Queues

(Blocking)Queue, ArrayDeque, PriorityQueue 생성 등

Sets

Cartesian product, 신규 집합 생성 등

Streams

↓java

static <T> Stream<T> stream​(Iterable<T> iterable) static <T> Stream<T> concat​(Stream<? extends T>... streams) static <A,​B,​R> Stream<R> zip​(Stream<A> streamA, Stream<B> streamB, BiFunction<? super A,​? super B,​R> function) static <A,​B> void forEachPair​(Stream<A> streamA, Stream<B> streamB, BiConsumer<? super A,​? super B> consumer) static <T,​R> Stream<R> mapWithIndex​(Stream<T> stream, Streams.FunctionWithIndex<? super T,​? extends R> function) static <T> Optional<T> findLast​(Stream<T> stream)

Tables

값 일괄 변경, transpose(행-열 뒤집기) 등

Ranges

DiscreteDomain<C extends Comparable>

이산 자료형 전체 범위를 표현한다. 예를 들어, 정수 전체 집합은 표현할 수 있지만, 소수 전체 집합은 표현할 수 없다

↓java

static DiscreteDomain<BigInteger> bigIntegers() // + integers, longs C maxValue() + minValue // 없으면 NoSuchElementException abstract C next(C value) + previous // 없으면 null

Range<C extends Comparable>

  • 대소 관계가 있는 자료형에 대해, 임계값을 이용해 범위 1개를 표현한다
  • (a..b), [a..b], (a..b], [a..b), (a..inf), [a..inf), (-inf..b), (-inf..b], (-inf..inf)

ContiguousSet<C extends Comparable>

DiscreteDomain 상에서의 Range 하나를 표현한다

RangeMap<K extends Comparable>

Range -> V 매핑을 표현한다

Forwawrding collections

ForwardingObject

  • 장식자 패턴 구현을 위한 최상위 추상 클래스
  • delegate()는 장식할 인스턴스를 반환하면 된다
  • hashCode(), equals(Object)는 backing object로 포워딩하지 않는다
  • ForwardingList, ForwardingMap, ... 등 interface-specific 서브클래스를 이용하거나, 직접 정의하면 된다

Others

Interner<E>

임의 불변 타입에서 String.intern()과 유사한 기능을 제공함을 표현

Interners

↓java

static <E> Interner<E> newStrongInterner() + weak static Interners.InternerBuilder newBuilder()

Ordering

  • 부가 기능이 있는 Comparattor
  • Comparators Since 21.0에도 있는 기능들임

  • 인스턴스 획득
    • compare(T, T) 재정의
    • from(Comparator), natural(), explicit(...) 등

...escape

XML에 유용한 Escaper 제공

...eventbus

@interface Subscribe

이벤트 객체 하나만 인자로 받는 구독자 메서드 표시

@interface AllowConcurrentEvents

구독자 메서드가 스레드-안전함을 표시

EventBus

↓java

void register​(Object object) // public @Subscribe 메서드를 갖는 구독자 등록 void post​(Object event) // 이벤트 발행

AsyncEventBus

지정 Executor로 처리

DeadEvent

처리되지 않은 이벤트는 DeadEvent로 감싸여 한 번 더 발행된다

...graph

Graph<N>

  • 지원 : 방향/무방향 그래프, self-loop 허용/비허용, 정점/간선에 대한 삽입 순서 보존/정렬/비정렬
  • 인스턴스 획득은 GraphBuilder 이용

ValueGraph<N,​V>

  • Graph + 간선 가중치
  • 인스턴스 획득은 ValueGraphBuilder 이용

Network<N,​E>

  • Graph + 모든 간선은 unique 객체
  • 두 정점 사이에 복수의 간선을 허용할 수 있다
  • 인스턴스 획득은 NetworkBuilder 이용

...hash

Hashing

adler32, crc32, crc32c, hmacMd5, hmacSha256, md5, sha512, ...

...html.HtmlEscapers

Escapers for HTML

...io

Files

java.io.File에 대한 확장. java.nio.Files에서 같은 기능을 많이 제공한다

↓java

static CharSource asCharSource​(File file, Charset charset) static CharSink asCharSink​(File file, Charset charset, FileWriteMode... modes) static void touch​(File file) static void createParentDirs​(File file) static MappedByteBuffer map​(File file) static String getFileExtension​(String fullName) static String getNameWithoutExtension​(String file) static Traverser<File> fileTraverser()

MoreFiles

java.nio.Files에 대한 확장

↓java

static CharSource asCharSource​(Path path, Charset charset, OpenOption... options) static CharSink asCharSink​(Path path, Charset charset, OpenOption... options) static ImmutableList<Path> listFiles​(Path dir) static Traverser<Path> fileTraverser() static Predicate<Path> isDirectory​(LinkOption... options) + isRegularFile static void touch​(Path path)static void touch​(Path path) static void createParentDirectories​(Path path, FileAttribute<?>... attrs) static String getFileExtension​(Path path) static String getNameWithoutExtension​(Path path) static void deleteRecursively​(Path path, RecursiveDeleteOption... options) static void deleteDirectoryContents​(Path path, RecursiveDeleteOption... options)

LineReader

\n, \r, \r\n 무관하게 한 줄씩 읽을 수 있게 해준다

Resources

클래스패스 상의 리소스에 접근하는 유틸리티를 제공한다

...math

...net

...primitives

...reflect

TypeToInstanceMap<B>

  • TypeToken -> instance 매핑
  • ImmutableTypeToInstanceMap<B>, MutableTypeToInstanceMap<B>

ClassPath

ClassLoader로부터 모든 클래스, 리소스 스캔

Reflection

↓java

static String getPackageName​(Class<?> clazz) static String getPackageName​(String classFullName) // 클래스 이름만 파싱하여 패키지 이름을 판단한다 static <T> T newProxy​(Class<T> interfaceType, InvocationHandler handler) // 단일 인터페이스 프록시 생성에 편리

TypeToken<T>

↓java

// 인스턴스 획득 1 new TypeToken<List<String>>() {} // 인스턴스 획득 2 abstract class IKnowMyType<T> { TypeToken<T> type = new TypeToken<T>(getClass()) {}; } new IKnowMyType<String>() {}.type => String final <X> TypeToken<T> where​(TypeParameter<X> typeParam, TypeToken<X> typeArg) // 동적으로 제네릭 타입을 치환 // e.g. static <K, V> TypeToken<Map<K, V>> mapOf(TypeToken<K> keyType, TypeToken<V> valueType) { return new TypeToken<Map<K, V>>() {} .where(new TypeParameter<K>() {}, keyType) .where(new TypeParameter<V>() {}, valueType); } final TypeToken<?> resolveType​(Type type) // 제네릭 실제 타입 획득 // e.g. new TypeToken<List<String>>() {}.resolveType(List.class.getMethod("get", int.class).getGenericReturnType()) == String.class final TypeToken.TypeSet getTypes() // 현재 타입 + 선조 타입 + 구현 인터페이스 // e.g. List<String> => // [java.util.List<java.lang.String>, java.util.Collection<java.lang.String>, java.lang.Iterable<java.lang.String>] final TypeToken<? super T> getSupertype​(Class<? super T> superclass) final TypeToken<? extends T> getSubtype​(Class<?> subclass) // e.g. var type1 = new TypeToken<List<String>>() {}; var type2 = type1.getSupertype(Iterable.class); == java.lang.Iterable<java.lang.String> var type3 = type2.getSubtype(List.class); == java.util.List<java.lang.String> final @Nullable TypeToken<?> getComponentType() // 배열 원소 타입 반성 final Invokable<T,​Object> method​(Method method) final Invokable<T,​T> constructor​(Constructor<?> constructor) // + wrap, unwrap // + isSupertypeOf, isSubtypeOf, isArray, isPrimitive

...util.concurrent

ListenableFuture<V>

  • 연산 완료 리스너(들)을 가질 수 있는 Future
  • JavaScript의 promise 체인과 유사한 로직 작성을 돕기 위해 개발됐다

  • 이미 완료된 경우, 추가되는 리스너는 즉시 실행된다
  • 리스너를 실행할 Executor 지정 가능

↓java

void addListener​(Runnable listener, Executor executor)

FluentFuture<V>

ListenableFuture에 체인 기능 추가

SettableFuture<V>

결과를 외부에서 설정 가능한 ListenableFuture

Futures

↓java

static <V> ListenableFuture<V> immediateFuture​(@Nullable V value) static ListenableFuture<Void> immediateVoidFuture() static <V> ListenableFuture<V> immediateFailedFuture​(Throwable throwable) static <V> ListenableFuture<V> immediateCancelledFuture() static <O> ListenableFuture<O> submit​(Callable<O> callable, Executor executor) static ListenableFuture<Void> submit​(Runnable runnable, Executor executor) static <O> ListenableFuture<O> submitAsync​(AsyncCallable<O> callable, Executor executor) static <O> ListenableFuture<O> scheduleAsync​(AsyncCallable<O> callable, Duration delay, ScheduledExecutorService executorService) static <V,​X extends Throwable> ListenableFuture<V> catching​(ListenableFuture<? extends V> input, Class<X> exceptionType, Function<? super X,​? extends V> fallback, Executor executor) static <V,​X extends Throwable> ListenableFuture<V> catchingAsync​(ListenableFuture<? extends V> input, Class<X> exceptionType, AsyncFunction<? super X,​? extends V> fallback, Executor executor) static <V> ListenableFuture<V> withTimeout​(ListenableFuture<V> delegate, Duration time, ScheduledExecutorService scheduledExecutor) static <I,​O> ListenableFuture<O> transform​(ListenableFuture<I> input, Function<? super I,​? extends O> function, Executor executor) static <I,​O> ListenableFuture<O> transformAsync​(ListenableFuture<I> input, AsyncFunction<? super I,​? extends O> function, Executor executor) static <I,​O> Future<O> lazyTransform​(Future<I> input, Function<? super I,​? extends O> function) // get() 호출이 있을 때 function 호출 static <V> ListenableFuture<List<V>> allAsList​(ListenableFuture<? extends V>... futures) static <V> ListenableFuture<List<V>> successfulAsList​(ListenableFuture<? extends V>... futures) static <T> ImmutableList<ListenableFuture<T>> inCompletionOrder​(Iterable<? extends ListenableFuture<? extends T>> futures) static <V> Futures.FutureCombiner<V> whenAllComplete​(ListenableFuture<? extends V>... futures) static <V> Futures.FutureCombiner<V> whenAllSucceed​(ListenableFuture<? extends V>... futures) static <V> ListenableFuture<V> nonCancellationPropagating​(ListenableFuture<V> future) // 출력 tufure를 취소해도 입력 future를 취소하지 않음 static <V> void addCallback​(ListenableFuture<V> future, FutureCallback<? super V> callback, Executor executor) static <V> V getDone​(Future<V> future)

Futures.FutureCombiner<V>

다른 ListenableFuture들의 결과들을 이용하는 ListenableFuture

↓java

<C> ListenableFuture<C> callAsync​(AsyncCallable<C> combiner, Executor executor) <C> ListenableFuture<C> call​(Callable<C> combiner, Executor executor) ListenableFuture<?> run​(Runnable combiner, Executor executor) // e.g. Futures.whenAllSucceed(loginDateFuture, recentCommandsFuture) .call( () -> new UsageHistory( username, Futures.getDone(loginDateFuture), Futures.getDone(recentCommandsFuture)), executor);

ListeningExecutorService

Future 대신 ListenableFuture를 반환하는 ExecutorService

ListeningScheduledExecutorService

ScheduledFuture 대신 ListenableScheduledFuture를 반환하는 ScheduledExecutorService

Callables

↓java

static <T> AsyncCallable<T> asAsyncCallable​(Callable<T> callable, ListeningExecutorService listeningExecutorService)

ClosingFuture<V>

↓java

// 비동기 연산에 사용된 자원을 자동으로 닫게 해준다 ClosingFuture.submit( closer -> closer.eventuallyClose(database.newTransaction(), closingExecutor), executor) .transformAsync((closer, transaction) -> transaction.queryClosingFuture("..."), executor) .transform((closer, result) -> result.get("userName"), directExecutor()) .catching(DBException.class, e -> "no user", directExecutor()) .finishToFuture();

CycleDetectingLockFactory

lock 요구 시 사이클을 감지하는 ReentrantLock, ReentrantReadWriteLock 인스턴스 생성

Service

  • 가동 상태(NEW -> STARTING -> RUNNING -> STOPPING -> TERMINATED / FAILED)와 연관 메서드를 갖는 객체
  • 중간 구현체 : AbstractExecutionThreadService, AbstractIdleService, AbstractScheduledService, AbstractService

ServiceManager

서비스 집합 관리자

TimeLimiter

  • 메서드 호출 제한 시간을 둔다
  • 구현체 : SimpleTimeLimiter

RateLimiter

초당 permit 사용량을 제한한 세마포어

ThreadFactoryBuilder

스레드 이름, daemon 여부, 우선순위 등 설정 간소화

...xml.XmlEscapers

Escapers for XML