리소스 관리에 정말로 관심이 있다면 콜백 관용구를 사용하는 것이 가장 안전한 방법입니다.
: 당신이 조기 종료를 지원하려면
public interface Callback<T> {
void handle(T item);
}
public class SuperVitalVault {
public void all(Callback<Precious> callback) {
try (...) {
for (Precious i : ...) {
callback.handle(i);
}
}
}
}
당신은 boolean
을 반환 Callback.handle(T)
을 변경할 수 있습니다 : 당신은 최종 사용자가 컬렉션의 항목을 처리 할 수 있습니다 수집,하지만 API를 노출하지 마십시오 당신이 당신의 자신의 콜백 인터페이스를 정의 멀리하려면
try (...) {
for (Precious i : ...) {
if (callback.handle(i)) break;
}
}
, 당신은 사용 구아바의 Function<T, Boolean>
또는 Predicate<T>
하지만 구아바에 의해 설립 된 의미 위반 참고 할 수 있습니다
0123을
함수 인스턴스는 일반적으로 참조 효과가 있으며 부작용이없고 equals와 일관성이 있다고 기대됩니다. 즉, a.equals (b)는 function.apply (a) .equals (function.apply 비)).
술어의 인스턴스는 일반적으로 부작용이없고 equals와 일치해야합니다.
try-with-resources를 사용하여 자동으로 대신 클래스를 수동으로 관리하려는 사용자는 무엇입니까? 'close'라고 불리는'finalize' 메소드를 만들면 문제가 해결 될까요? – Jeffrey
불행히도'finalize'는 호출 될 수 없다는 것을 의미합니다. GC가 호출하지 않기로 결정할 수도 있습니다. – joshlf
사실,'finalize '의 신뢰할 수 없다는 것이 아마도 리소스가있는 try-with-resources가 도입 된 것이라고 생각합니다. – joshlf