비 무효인지 여부에 따라 다를 오버로드 된 메서드는 "모호한"경고 :회피 javac의 유일한 매개 변수 (λ)이 무효 또는 내가 (다른 사람의 사이에서) 다음 방법과 유틸리티 클래스 쓰고 있어요
class FunctionNamingUtils {
public static <T> Consumer<T> named(String name, Consumer<T> delegate) {
class NamedConsumer implements Consumer<T> {
@Override public void accept(T t) { delegate.accept(t); }
@Override public String toString() { return name; }
}
return new NamedConsumer();
}
public static <T, R> Function<T, R> named(String name, Function<T, R> delegate) {
class NamedFunction implements Function<T, R> {
@Override public R apply(T t) { return delegate.apply(t); }
@Override public String toString() { return name; }
}
return new NamedFunction();
}
}
컴파일러를
경고 : 자바 : 가에서 (java.lang.String의, java.util.function.Consumer) ... 이름 이름 (java.lang.String의, 자바 잠재적으로 모호한 입니다으로 뿌려줍니다. util.function.Function) ...
람다가 값을 반환하는지 void인지 여부에 따라 우리는 한 방향 으로든 다른 방향 으로든 갈 것이고,보기 힘든 단일 명령문 람다에 대해서 경고의 목적을 알 수 있습니다.
이 경우 그 것은 정확히 우리가 원하는 것이며 동일한 기능에 대해 두 가지 메서드 이름을 기억해야하는인지 부담을 줄이기 위해 오버로드를 사용하고 싶습니다. (나는 이미 타협해야했습니다. 부울 함수와 충돌하는 namedPredicate
).
경고를 표시하지 않거나 다른 방식으로 API를 표현하는 것에 대한 아이디어를 찾고 있습니다. 초점은 클라이언트 측에서 명확성과 사용의 용이성에 있습니다.
Java 8 이상 만 신경 씁니다.
어쨌든 namedPredicate로 이미 손상된 경우 namedFunction 및 namedConsumer도 사용하면 API의 일관성이 향상됩니다. –
나는 JB에 동의한다. 물론 이것은 스타일의 문제이지만, 나는 종종 ** 과부하 ** 메소드가 ** 두뇌에 과부하 **하는 경향이 있음을 알게됩니다. 예를 들어, 이와 같은 시나리오 때문입니다. 그래서 제 2 센트도 될 것입니다. 단지 다른 이름을 사용하십시오. – GhostCat
간결함은 특히 원시 개념의 경우에도 중요합니다. 그렇지 않으면 스프링 프레임 워크와 같은 이름을 갖게됩니다 (불쾌감은 없지만 유틸리티에 대해서는 좋은 선택이라고 생각하지 않습니다). – ddimitrov