자바에서는 "Arbitrary Number of Arguments"이름으로 임의의 개수의 인자를 받을 수 있는 ... 이라는 구문이 있다.
시스템에서 제공하는 printf가 그 예이다.
public PrintStream printf(String format, Object... args)
인텔리J에서는 다음과 같은 경고를 보여줄 때가 있다. (Github)
Reports any calls to a variable arity method where the call has a single argument in the variable arity parameter position, which is either a null or an array of a subtype of the variable arity parameter. Such an argument may be confusing as it is unclear if a varargs or non-varargs call is desired. For example
System.out.printf("%s", null)
.
예를 들자면 아래와 같은 Redis를 지우는 파라메터를 받는 경우이다.
public void remove(String key, String... values) {
redisTemplate.opsForSet().remove(key, values);
}
이 remove 메서드는 스프링의 org.springframework.data.redis.core.SetOperations의 remove 메서드 인터페이스이다.
Long remove(K key, Object... values);
다음과 같이 방어코드를 넣어도 마찬가지 이다.
public void remove(String key, String... values) {
if (values != null && values.length > 0) {
redisTemplate.opsForSet().remove(key, values);
}
}
아래와 같이 iteration을 도는 수 밖에 없는 것일까?
public void remove(String key, String... values) {
for (String value: values) {
redisTemplate.opsForSet().remove(key, value);
}
}
'Programing > JVM(Java, Kotlin)' 카테고리의 다른 글
[Java] enum find static 헬퍼 메서드 (0) | 2016.09.08 |
---|---|
TreeMap 정렬 순서 바꾸기 (0) | 2016.09.05 |
[annotaion] javax.annotation.Nullable (0) | 2015.07.17 |
[mokito] any~ 정리 (0) | 2015.06.30 |
guava MyBatis에서 괜찮은 쓰임새 (2) | 2015.06.29 |