다음과 같은 문제가있었습니다. 메서드는 2 개의 인수를 취하는 이중 함수를 사용해야합니다. 하나는 Collection<T>
유형이고 다른 하나는 T
입니다. 실제 함수는 실제로는 Collection::remove
또는 Collection::add
일 수 있습니다. 실제 함수는 12 개 이상의 콜렉션에 사용되며 여러 가지 유형의 값과 콜렉션이 함수에 있습니다.메서드 정의에서 일반 BiFunction을 사용하여이 작업을 수행 할 수 있습니까?
는 처음에는들이 generic 없었다 - 단지 Collection<String>
의가 있었다 요소 BiFunction<Collection<String>, String, Boolean>
그냥 잘 작동으로 String
의 너무 인수를 선언했다 :
List<String> idCodes;
void visitElement(Element e,
BiFunction<Collection<String>, String, Boolean> elementOp) {
elementOp.apply(idCodes, e.getIdCode());
}
을 그러나 나는 너무 컬렉션의 다른 유형을 추가하고, 발견
List<String> idCodes;
List<Integer> weights;
void visitElement(Element e,
BiFunction<...> elementOp) {
elementOp.apply(idCodes, e.getIdCode());
elementOp.apply(weights, e.getWeight());
}
을했지만 실패 - 난 그냥 상관없이 내가 사용하는 어떤 한 장소 또는 다른 오류를 컴파일 얻을 수있다 : 나는 더 이상 일반적으로 BiFunction
를 사용하는 방법을 찾을 수 d는 유형 매개 변수에 대해 실패합니다. 내 시도
하나는 Collection::add
에 전달할 때 실제로 Collection<String>
및 String
에 기능을 적용 할 때
<T> void visitElement(Element e,
BiFunction<Collection<T>, T, Boolean> elementOp)
이 아닌 실패했다; 또는 Collection<Integer>
및 int
.
interface ElementOp {
<T> boolean apply(Collection<T> collection, T item);
}
을 내가 원하는대로 그리 놀라 울이는 지금 정확히 작동합니다. 따라서 내 질문은 :
난 정말
interface ElementOp {
<T> boolean apply(Collection<T> collection, T item);
}
void visitElement(Element e,
ElementOp elementOp) {
elementOp.apply(idCodes, e.getIdCode());
elementOp.apply(weights, e.getWeight());
}
를 사용해야합니까 또는이 사건에 대한 BiFunction
를 사용하여 어떻게 든 가능한 것입니까?
P. 나는 이클립스 4.3 화성 자바 컴파일러를 사용하고있다. 그래서 약간의 버그로 인해 작동하지 않을 수도있다.